ZendServiceTwitterを使って、ユーザーのメールアドレスを取得したい

投稿者: Anonymous

下記 Twitter API ドキュメントに従って、
OAuth 認証時にユーザーのメールアドレスを取得しようと試みています。

GET account/verify_credentials | Twitter Developers

上記ドキュメントによると、

Request a User’s Email Address

Requesting a user’s email address requires your application to be whitelisted by Twitter.
To request access, please use this form.

Once whitelisted,
the “Request email addresses from users” checkbox will be available under your app permissions on apps.twitter.com.
Privacy Policy URL and Terms of Service URL fields will also be available
under settings which are required for email access.

If enabled,
users will be informed via the oauth/authorize dialog
that your app can access their email address.

ということなので、
whitelist の申請とアプリケーションの設定を済ませました。

Twitter Application Management
ttps://apps.twitter.com
Settings
 1. Callback URL
 2. Privacy Policy URL
 3. Terms of Service URL
Permissions
 Additional Permissions
 These additional permissions require that you provide URLs
 to your application or service’s privacy policy and terms of service.
 You can configure these fields in your Application Settings.
 [x] Request email addresses from users

2016-03-02_023924


その後、前述のドキュメント内の「OAuth Signature Generator」を使って “cURL command” を生成。

cURL command
OAuth Tool
 $ curl
 –get ‘ttps://api.twitter.com/1.1/account/verify_credentials.json’
 –data ‘include_email=true’
 –header ‘Authorization: OAuth
  oauth_consumer_key=”…”,
  oauth_signature=”…”,
  oauth_nonce=”…”,
  oauth_token=”…”,
  oauth_signature_method=”HMAC-SHA1″,
  oauth_timestamp=”1456854748″,
  oauth_version=”1.0″‘

返ってくる JSON に email が含まれていることを確認しました。

{
  "id":...,
  "name":"...",
  ...
  "email":"..."
}

一方、下記 ZendServiceTwitter component を使って同じように
Twitter ユーザーのメールアドレスを取得しようと試みました。

index.php

$config = array(
  'access_token' => array(
    'token'  => '...',
    'secret' => '...'
  ),
  'oauth_options' => array(
    'consumerKey' => '...',
    'consumerSecret' => '...',
  ),
  'http_client_options' => array(
    'adapter' => 'ZendHttpClientAdapterCurl',
    'curloptions' => array(
      CURLOPT_SSL_VERIFYHOST => false,
      CURLOPT_SSL_VERIFYPEER => false,
    ),
  ),
);

$twitter = new ZendServiceTwitterTwitter($config);

$params = ['include_email' => true];
$response = $twitter->account->verifyCredentials($params);
if (!$response->isSuccess()) {
    die('Something is wrong with my credentials!');
}

libraryZendServiceTwitterTwitter.php

include_email=true が付くように、コードの一部を改変しています。

/**
 * Verify Account Credentials
 *
 * @throws HttpClientExceptionExceptionInterface if HTTP request fails or times out
 * @throws ExceptionDomainException if unable to decode JSON payload
 * @return Response
 */
public function accountVerifyCredentials($params = array())
{
  $this->init();
  $response = $this->get('account/verify_credentials', $params);
  return new Response($response);
}

curl では取得できていた email が、php では取れていません。

email 以外のユーザー情報は取れています。

何が間違っているのでしょう?

解決

trueを文字列に変えて試してみればいかがでしょうか?

$params = ['include_email' => 'true'];
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *