【php】画像付きツイートを何のライブラリも使わないで投稿する
問題
phpで画像付きツイートしたい。なるべく簡単に。
答え
わかりやすいかどうかは人それぞれだと思うけど、何のライブラリも使わないでコピペで動く画像付きツイートスクリプトの例は以下の通り。
<?php //twitterのAPIを使うために必要なもの $consumer_key = 'xxxxxxxxxxxxxxxxxxxx'; $consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $oauth_token = 'xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $oauth_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //画像を用意する $content_type = 'image/jpeg'; $contents = file_get_contents('test.jpg'); //本文を用意する $status = 'テストです。テストです。'; //POSTするデータを作る $boundary = '--' . '12345678900987654321'; $data = '--' . $boundary . "\r\n" . 'Content-Disposition: form-data; name="status"' . "\r\n\r\n" . $status . "\r\n" . '--' . $boundary . "\r\n" . 'Content-Disposition: form-data; name="media[]"; filename="' . time() . '"' . "\r\n" . 'Content-Type: ' . $content_type . "\r\n" . 'Content-Transfer-Encoding: binary' . "\r\n\r\n" . $contents . "\r\n" . '--' . $boundary . '--' . "\r\n\r\n"; //投稿する $url = 'https://api.twitter.com/1.1/statuses/update_with_media.json'; $method = 'POST'; $oauth_parameters = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => microtime(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_token' => $oauth_token, 'oauth_version' => '1.0', ); $base_string = implode('&', array( rawurlencode($method), rawurlencode($url), rawurlencode(http_build_query($oauth_parameters, '', '&', PHP_QUERY_RFC3986)) )); $key = implode('&', array(rawurlencode($consumer_secret), rawurlencode($oauth_token_secret))); $oauth_parameters['oauth_signature'] = base64_encode(hash_hmac('sha1', $base_string, $key, true)); $options = array( 'http'=>array( 'method' => $method, 'header' => array( 'Authorization: OAuth ' . http_build_query($oauth_parameters, '', ',', PHP_QUERY_RFC3986), 'Content-Type: multipart/form-data; boundary=' . $boundary, ), 'content' => $data, 'ignore_errors' => true, ) ); $result = file_get_contents($url . ($get_parameters ? '?' . http_build_query($get_parameters) : ''), false, stream_context_create($options)); //結果を確認してみる var_dump($result);
備考
上の例では画像は1つだけ。複数画像添付する手順はまた少し違うので、また別の記事で。
コメント