はじめに

TwitterのPHP用OAuthライブラリ「twitteroauth」を用いてTwitterのbotを作ることができます。しかし、元のファイルのままでは、画像のアップロード(statuses/update_with_media)に対応していません。

そこで、twitteroauthで画像のアップロードに対応させる方法を書き留めておきます。

Contents

①変更ファイル確認

こちら」からダウンロードしたフォルダの
twitteroauth-master/twitteroauth/twitteroauth.php
このファイルを少し変更します。

②画像アップロード関数の追加

では、具体的に変更する箇所を見ていきましょう。

まず、次の関数を付け足します。oAuthRequest関数の次あたりにでも追加してください。

  function oAuthRequestImage($url, $method = NULL ,$args = array()) {
    $req = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, array());
    $req->sign_request($this->sha1_method, $this->consumer, $this->token);
    return $this->http($req->get_normalized_http_url(), $method,$args, $req->to_header());
  }

③http関数の変更

次に、変更前のファイルでいう197行目あたりにあるhttp関数

//197行目あたり
function http($url, $method, $postfields = NULL) {
  $this->http_info = array();
  $ci = curl_init();
  /* Curl settings */
  curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
  curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
  curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
  curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
  curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
  curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
  curl_setopt($ci, CURLOPT_HEADER, FALSE);
//以下略

を次のように変更してください。

function http($url, $method, $postfields = NULL, $header = '') {//「$header = ''」を追加
  $this->http_info = array();
  $ci = curl_init();
  /* Curl settings */
  curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
  curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
  curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
  curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:',$header));//「$header」を追加
  curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
  curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
  curl_setopt($ci, CURLOPT_HEADER, FALSE);
//以下略

焦点を当てて見ると、変更箇所は次の2か所です。

//1か所目
function http($url, $method, $postfields = NULL) {
//↓197行目を以下に変更↓
function http($url, $method, $postfields = NULLL, $header = '') {

//2か所目
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
//↓205行目を以下に変更↓
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:',$header));

これで画像のアップロードが可能になりました!
意外と情報が見つからなくて困った(>_<)

参考サイト