Services_Twitterで現時点のAPIにアクセスする方法のメモ

Services_Twitterで現時点のAPIにアクセスする方法のメモ

 メンテナンスされてないみたいだけど使ってるアプリがあったのでメモ:



  requrie_once 'Services/Twitter.php';

  Services_Twitter::$searchUri = 'https://search.twitter.com';  // APIのリクエスト先をSSL対応に
  Services_Twitter::$uri = 'https://api.twitter.com/1.1';  // APIのリクエスト先をv1.1+SSL対応に
  // 上記は Services/Twitter.php を直接書き換えてしまってもいいかも。メンテされてないんだし。

  $tw = new Services_Twitter();

  $http_request = new HTTP_Request2();
  $http_request->setAdapter('curl');
  //$http_request->setConfig('ssl_cafile', '/usr/local/share/certs/ca-root-nss.crt');  // 実際のca-rootのパスに合わせる
  //$http_request->setConfig('ssl_verify_peer', false);

  $tw->setRequest($http_request);

// 以下、既存の処理

 APIのバージョンが変わった時の対策は以前行なっていたのですが(リクエスト先を変えるだけだったし)、今回もURLをhttpsにするだけで解決するかと思ったらハマりました。

 HTTP::Request2を使ったリクエストでhttps://api.twitter.comへの接続でエラーが出ていたのでその対策を確認したところ、HTTP_Request2のオプションとして

  • cURLを使うように変える
  • cafileの位置を指定する
  • verifyを切る

――があるようでした。

 cURLが入っている環境ならそれを使うのがいいんじゃないかな。

 上記のオプションを用いてServices_Twitterがリクエストする方法にしばらく気付かなかったのですが*1、Services_Twitter::setRequest() でHTTP_Request2オブジェクトを設定できるのに気付いて無事解決。

*1:しばらく HTTP_OAuth_Consumer 側の問題だと思ってそちらの修正をしてて「直らんなぁ」と思ってたのでした。