PHP で Twitter API OAuth 認証 「ツイートと画像投稿」「画像複数投稿」
Twitter API
Twitterアプリケーション登録
Twitter API を利用するためには、Twitterアプリケーション登録が必要です。まだ登録していない方は、次の記事のTwitter OAuth 簡単接続 REST API を PHP で活用! 「Twitterアプリケーション登録」をご覧下さい。また、以下でご紹介するサンプルコードでは、Twitterアプリケーションの Consumer key、Consumer secret、Access Token、Access Token Secret などが必要になるので、併せて確認しテキストに保存などしておいて下さい。
OAuth接続するためのTwitterライブラリのダウンロード
(1) OAuth接続するためのTwitterライブラリのダウンロード
OAuth接続するためのTwitterライブラリを Twitter libraries で紹介されている、themattharris氏の tmhOAuth を使用します。使用するファイルは tmhOAuth.php の1つのみです。ファイルはGithub:https://github.com/themattharris/tmhOAuth からダウンロードできます。
最新ダウンロードファイル:tmhOAuth
サンプルで使用しているバージョンのファイル:tmhOAuth-master.zip 152 KB
Twitter OAuth認証とはTwitterの認証方式です。Twitterは元々Basic認証でしたが、セキュリティー面の向上を図るためにOAuth認証へ変更されました。Twitter API V1.1 からは、すべての情報取得にOAuth認証が必要になります。OAuthの仕様は記載されています。
Twitter application(My applications) へOAuth認証接続することで、Twitter API サービスを利用することが出来ます。Twitter API では、タイムラインの取得、リストの取得、つぶやきの検索、ツイートやリツイートなどの機能が用意されており、これらの機能をウェブアプリケーションやスマートフォンアプリケーションに実装することが出来ます。
詳しくは Docs を参照下さい。
Twitter application(My applications) へOAuth認証接続することで、Twitter API サービスを利用することが出来ます。Twitter API では、タイムラインの取得、リストの取得、つぶやきの検索、ツイートやリツイートなどの機能が用意されており、これらの機能をウェブアプリケーションやスマートフォンアプリケーションに実装することが出来ます。
詳しくは Docs を参照下さい。
(2) 動作環境
- PHP Version 5.3以上であること(phpinfo();関数で確認)
- cURL support enabledであること(phpinfo();関数で確認)
- hash_hmac()関数が利用できること(PHP5.1.2で導入)
画像付きツイート投稿のサンプルコード
「update_tmh.php」というファイルを作成して、「tmhOAuth.php」ファイルと同じ階層にアップロードしてください。
本サイトの例:
本サイトの例:
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/tmhOAuth.php
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/update_tmh.php
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/update_tmh.php
画像付きツイートを投稿する場合、画像を先に media/upload でTwitter側に送信して、media_idを取得します。その後、media_idとツイートを合わせて statuses/update で送信します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>Twitter REST API OAuth認証 画像付きツイート投稿 [POST media/upload.json statuses/update.json] | WEPICKS!</title> </head> <body> <h1>Twitter REST API OAuth認証 画像付きツイート投稿 [POST media/upload.json statuses/update.json]</h1> <!-- 説明ページurl --> <h2><a href="/twitter-restapi-tmhoauth/">→説明はこちら</a></h2> <?php ######################################### ### 画像とツイートの投稿 //アップロードファイル確認 if(!empty($_FILES)){ $twObj = NULL; $sUpdImgBase64 = ''; $aUpdImgParams = array(); $iImgCode = 0; $aResUpload = array(); $iMediaId = 0; $aUptParams = array(); $aResUpdate = array(); //tmhOAuth.phpインクルード require('./tmhOAuth.php'); //サーバー上のtempファイル名を格納 $sImgTmpName = $_FILES['picture']['tmp_name']; //Access Tokenの設定 apps.twitter.com でご確認下さい。 //Consumer keyの値を格納 $sConsumerKey = "***********************"; //Consumer secretの値を格納 $sConsumerSecret = "**********************************************"; //Access Tokenの値を格納 $sAccessToken = "**********************************************"; //Access Token Secretの値を格納 $sAccessTokenSecret = "**********************************************"; //OAuthオブジェクトを生成する $twObj = new tmhOauth( array( "consumer_key" => $sConsumerKey, "consumer_secret" => $sConsumerSecret, "token" => $sAccessToken, "secret" => $sAccessTokenSecret, "curl_ssl_verifypeer" => false, ) ); //PHPでアップロードした画像をbase64エンコードします。 $sUpdImgBase64 = base64_encode(file_get_contents($sImgTmpName)); //パラメータの作成 $aUpdImgParams = array('media_data' => $sUpdImgBase64); //base64エンコードした画像をtwitterに送信 $iImgCode = $twObj->request( 'POST', "https://upload.twitter.com/1.1/media/upload.json", $aUpdImgParams, true, true); // media/upload.json の結果をjson文字列で受け取り配列に格納 $aResUpload = json_decode($twObj->response["response"], true); //メディアIDの取得 $iMediaId = $aResUpload['media_id']; //メディアIDとツイート文字列のパラメータを作成 $aUptParams = array( 'media_ids' => $iMediaId,//取得したmedia_id 'status' => $_POST['tweet']//ツイート内容 ); //メディアIDとツイート文字列をTwitterに送信 $iImgCode = $twObj->request( 'POST', "https://api.twitter.com/1.1/statuses/update.json", $aUptParams); // statuses/update.json の結果をjson文字列で受け取り配列に格納 $aResUpdate = json_decode($twObj->response["response"], true); //配列を展開 if(isset($aResUpdate['errors']) && $aResUpdate['errors'] != ''){ ?> <h1>投稿に失敗しました。</h1> エラー内容:<br> <pre> <?php var_dump($aResUpdate); ?> </pre> <?php }else{ //id と media url を表示 echo '<h1>IDとmedia urlの表示</h1>'; echo '投稿ID:'.$aResUpdate['id']."<br>\n"; echo 'media ID:'.$aResUpdate['entities']['media'][0]['id']."<br>\n"; echo 'media url:'.$aResUpdate['entities']['media'][0]['media_url']."<br>\n"; echo '<img src="'.$aResUpdate['entities']['media'][0]['media_url'].'" />'."<br>\n"; echo 'screen_name:<a href="https://twitter.com/'.$aResUpdate['user']['screen_name'].'" target="_blank">'.$aResUpdate['user']['screen_name']."</a><br>\n"; //すべての内容 echo '<h1>$aResUpdate 内容をvar_dumpで確認</h1>'; echo '<pre>'; var_dump($aResUpdate); echo '</pre>'; } } ?> <?php ######################################### ### 投稿フォーム ?> <h1>投稿フォーム</h1> <form action="update_tmh.php" method="POST" enctype="multipart/form-data"> 画像選択:<input type="file" name="picture"><br> ツイート:<textarea name="tweet"></textarea><br> <input type="submit" value="送信" /> </form> </body> </html> |
複数画像付きツイート投稿のサンプルコード
「update_multi_tmh.php」というファイルを作成して、「tmhOAuth.php」ファイルと同じ階層にアップロードしてください。
本サイトの例:
本サイトの例:
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/tmhOAuth.php
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/update_multi_tmh.php
https://wepicks.net/code-example/twitter-restapi/tmhOAuth/update_multi_tmh.php
複数の画像を同時に投稿する場合、複数の media_id を「 , (カンマ)」で区切って1つの media_id として送信します。上限は4つです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>Twitter REST API OAuth認証 複数画像付きツイート投稿 [POST media/upload.json statuses/update.json] | WEPICKS!</title> </head> <body> <h1>Twitter REST API OAuth認証 複数画像付きツイート投稿 [POST media/upload.json statuses/update.json]</h1> <!-- 説明ページurl --> <h2><a href="/twitter-restapi-tmhoauth/">→説明はこちら</a></h2> <?php ######################################### ### 複数画像とツイートの投稿 //アップロードファイル確認 if(!empty($_FILES)){ //画像ファイルの tmp name を取得 $aImgTmpNames = array(); foreach($_FILES as $aImgFile){ foreach($aImgFile as $keyname => $value){ if($keyname == 'tmp_name' && $value != '') $aImgTmpNames[] = $value; } } //tmhOAuth.phpインクルード require('./tmhOAuth.php'); //Access Tokenの設定 apps.twitter.com でご確認下さい。 //Consumer keyの値を格納 $sConsumerKey = "***********************"; //Consumer secretの値を格納 $sConsumerSecret = "**********************************************"; //Access Tokenの値を格納 $sAccessToken = "**********************************************"; //Access Token Secretの値を格納 $sAccessTokenSecret = "**********************************************"; //OAuthオブジェクトを生成する $twObj = NULL; $twObj = new tmhOauth( array( "consumer_key" => $sConsumerKey, "consumer_secret" => $sConsumerSecret, "token" => $sAccessToken, "secret" => $sAccessTokenSecret, "curl_ssl_verifypeer" => false, ) ); ### tmp nameをbase64エンコードして media/upload.json でメディアIDを取得します。 //複数の画像をアップロードする場合は各メディアIDをカンマで区切ります。 $sUpImgBase64 = ''; $aUploadImgParams = array(); $iImgCode = 0; $sMediaIds = ''; $iCnt = 0; $aResUpload = array(); $aUpdateParams = array(); $aResUpdate = array(); foreach($aImgTmpNames as $sImgTmpName){ //PHPでアップロードした画像をbase64エンコードします。 $sUpImgBase64 = base64_encode(file_get_contents($sImgTmpName)); //パラメータの作成 $aUploadImgParams = array('media_data' => $sUpImgBase64); //base64エンコードした画像をtwitterに送信 $iImgCode = $twObj->request( 'POST', "https://upload.twitter.com/1.1/media/upload.json", $aUploadImgParams, true, true); // media/upload.json の結果をjson文字列で受け取り配列に格納 $aResUpload = json_decode($twObj->response["response"], true); //区切り文字カンマの挿入 if($iCnt > 0) $sMediaIds .= ','; $sMediaIds .= $aResUpload['media_id']; $iCnt++; if($iCnt > 3) break;//最大4ファイル } //メディアIDとツイート文字列のパラメータを作成 $aUpdateParams = array( 'media_ids' => $sMediaIds,//先ほど取得したmedia_id 'status' => $_POST['tweet']//つぶやき内容 ); //メディアIDとツイート文字列をTwitterに送信 $iImgCode = $twObj->request( 'POST', "https://api.twitter.com/1.1/statuses/update.json", $aUpdateParams); // statuses/update.json の結果をjson文字列で受け取り配列に格納 $aResUpdate = json_decode($twObj->response["response"], true); //配列を展開 if(isset($aResUpdate['errors']) && $aResUpdate['errors'] != ''){ ?> <h1>投稿に失敗しました。</h1> エラー内容:<br> <pre> <?php var_dump($aResUpdate); ?> </pre> <?php }else{ //id と media url を表示 echo '<h1>IDとmedia urlの表示</h1>'; echo 'screen_name:<a href="https://twitter.com/'.$aResUpdate['user']['screen_name'].'" target="_blank">'.$aResUpdate['user']['screen_name']."</a><br>\n"; foreach($aResUpdate['extended_entities']['media'] as $array){ foreach($array as $keyname => $value){ if($keyname == 'id')echo 'media ID:'.$value."<br>\n"; if($keyname == 'media_url') echo 'media url:'.$value."<br>\n"; if($keyname == 'media_url') echo '<img src="'.$value.'" />'."<br>\n"; } } //すべての内容 echo '<h1>$aResUpdate 内容をvar_dumpで確認</h1>'; echo '<pre>'; var_dump($aResUpdate); echo '</pre>'; } } ?> <?php ######################################### ### 投稿フォーム ?> <h1>投稿フォーム</h1> <form action="update_multi_tmh.php" method="POST" enctype="multipart/form-data"> 画像選択1:<input type="file" name="picture1"><br> 画像選択2:<input type="file" name="picture2"><br> 画像選択3:<input type="file" name="picture3"><br> 画像選択4:<input type="file" name="picture4"><br> ツイート:<textarea name="tweet"></textarea><br> <input type="submit" value="送信" /> </form> </body> </html> |
以上です。
タグ(=記事関連ワード)
タグ: twitter api
日付
投稿日:2018年8月3日
最終更新日:2018年08月04日
最終更新日:2018年08月04日
このカテゴリの他のページ
この記事へのコメント
トラックバックurl
https://wepicks.net/twitter-restapi-post-images/trackback/