質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1221閲覧

Twitter公式クライアントのAPIコンシューマーキーを利用する方法

mer

総合スコア12

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/26 05:15

Twitter公式のAPIキーがあるとの回答を頂き、その公式APIキーからツイッターの利用をしたいと考えております。
Twitter公式クライアントのコンシューマキー

phpやPythonなどから使用する場合コンシューマーキーとアクセストークンが必要なのですが、
Twitter公式クライアントからどうやってアクセストークンを取得すればできるのでしょうか?

自身で手に入れたAPIキーでならこの下記のコードでアクセストークンを入手することが可能だったのですが、
こちらのコードのコンシューマーキーの項目を公式Twitterのクライアントにすると
echo '失敗!: '.$e->getMessage();
のエラーが出てきて上手くいきません。

TwitterAPIキーでアプリ認証してアクセストークンを取得するために参考にさせていただいたサイト
[Twitter API] bot用のアクセストークンを取得する方法 (PHPでTwitterのOAuth認証)

こちらの手持ちのAPIキーでならすべてこのコードで上手くいっているのですが、公式Twitterではできないのでしょうか?
他にTwitte公式のアクセストークンを取得する方法はないものでしょうか?

<?php const CONSUMER_KEY = 'コンシューマーキー'; const CONSUMER_SECRET = 'コンシューマーシークレットキー'; session_set_cookie_params(600); session_start(); try { if (empty($_GET)) { //-------------------------------------- // 1. 最初にアクセスした時 //-------------------------------------- // セッション削除 unset($_SESSION['oauth_token']); unset($_SESSION['oauth_token_secret']); // APIを叩いてリクエストトークン取得して、セッションに保存 $res = post( 'https://api.twitter.com/oauth/request_token', [ 'oauth_callback' => '', // localhostだとこれは使えないらしいのでカラ。 ] ); if (!isset($res['oauth_token'])) { throw new Exception('レスポンス→ '.var_export($res, true)); } $_SESSION['oauth_token'] = $res['oauth_token']; $_SESSION['oauth_token_secret'] = $res['oauth_token_secret']; // リクエストトークンを持ってTiwtterの認証画面に行くリンクを表示 header('Content-Type: text/html'); $url = 'https://api.twitter.com/oauth/authenticate?oauth_token='.$res['oauth_token']; echo '<a href="'.$url.'">'.$url.'</a>'; } else { //-------------------------------------- // 2. Twitterで認証して戻ってきた時 //-------------------------------------- // もらったパラメータ『oauth_verifier』をつけてAPIを叩き、アクセストークン取得 $res = post( 'https://api.twitter.com/oauth/access_token', [ 'oauth_verifier' => $_GET['oauth_verifier'], ], $_SESSION['oauth_token'], // セッションに保存していたリクエストトークンを署名に使う $_SESSION['oauth_token_secret'] // 同上 ); if (!isset($res['oauth_token'])) { throw new Exception('レスポンス→ '.var_export($res, true)); } // アクセストークンを画面に表示 header('Content-Type: text/html'); echo implode([ '成功!', 'Access Token: '.$res['oauth_token'], 'Access Token Secret: '.$res['oauth_token_secret'], 'User ID: '.$res['user_id'], 'Screen Name: '.$res['screen_name'], ], '<br />'); } } catch (Exception $e) { header('Content-Type: text/plain'); echo '失敗!: '.$e->getMessage(); } /** * 対象URLにOAuthの署名つきでPOSTし、結果を連想配列で返却する */ function post($url, $params, $token = null, $secret = null) { // curlでPOST $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_HTTPHEADER => [ createOAuthHeader($url, $params, $token, $secret) ], CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), ]); if (($res = curl_exec($ch)) === false) { throw new Exception('通信時にエラーが発生しました。'); } curl_close($ch); parse_str($res, $resArr); return $resArr; } /** * OAuth用のヘッダを作成して返却する */ function createOAuthHeader($url, $params, $token, $secret) { $sigparams = [ 'oauth_consumer_key' => CONSUMER_KEY, 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_nonce' => md5(uniqid(rand(), true)), 'oauth_version' => '1.0', ]; if (isset($token)) { // リクエストトークンがあればセット $sigparams['oauth_token'] = $token; } $sigparams += $params; // ルール通りに署名を作成してセット // https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html ksort($sigparams); $data = 'POST&'.rawurlencode($url).'&'.rawurlencode(http_build_query($sigparams, '', '&', PHP_QUERY_RFC3986)); // ここでは関係無いが、パラメータにスペースが含まれてる時用にRFC3986を明示的に指定 $key = rawurlencode(CONSUMER_SECRET).'&'; $key .= isset($secret) ? rawurlencode($secret) : ''; // リクエストトークンがあればセット $hash = hash_hmac('sha1', $data, $key, true); $sigparams['oauth_signature'] = base64_encode($hash); // ヘッダ文字列にして返却 return 'Authorization: OAuth '.http_build_query($sigparams, '', ','); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Twitter公式のAPIキーがあるとの回答を頂き、その公式APIキーからツイッターの利用をしたいと考えております。

少なくとも、おおっぴらに聞いていいような内容ではないと判断します。

投稿2019/06/26 05:21

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mer

2019/06/26 05:38

では、回答していただいた方にその回答内容をそのままお伝えさせていただきますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問