【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つだけ。複数画像添付する手順はまた少し違うので、また別の記事で。