PEAR::HTTP_OAuthでxAuth

3月 5th, 2010
No comments

xAuthの申請が通ったので試してみた。

via:ウノウラボ Unoh Labs: PECL::oauthでxAuth

PHP
require_once 'HTTP/Request2.php';
require_once 'HTTP/OAuth/Consumer.php';

$consumer_key           = 'YOUR-CONSUMER-KEY';
$consumer_secret        = 'YOUR-CONSUMER-SECRET';
$username               = 'YOUR-USER-NAME';
$password               = 'YOUR-PASSWORD';
$xauth_access_token_url = 'https://api.twitter.com/oauth/access_token';

$params = array(
  'x_auth_username' => $username,
  'x_auth_password' => $password,
  'x_auth_mode'     => 'client_auth',
);

try {
  $request = new HTTP_Request2();
  $request->setConfig('ssl_verify_peer', false);

  $consumerRequest = new HTTP_OAuth_Consumer_Request();
  $consumerRequest->accept($request);

  $oauth = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);
  $oauth->accept($consumerRequest);

  $response = $oauth->sendRequest($xauth_access_token_url,
                                  $params,
                                  HTTP_Request2::METHOD_POST);

  if ($response->getStatus() !== 200) {
    throw new Exception($response->getBody(), $response->getStatus());
  }
} catch (Exception $e) {
  echo 'Error';
  exit;
}

// oauth_token=xxx&oauth_token_secret=xxx&
// user_id=xxx&screen_name=xxx&x_auth_expires=0
parse_str($response->getBody(), $access_token_info);

// oauth_token, oauth_token_secret, user_id, screen_name,
// x_auth_expires
var_dump($access_token_info);

取得したauth_tokenとtoken_secretを利用してtwitterにポスト。

PHP
require_once 'Services/Twitter.php';
require_once 'HTTP/OAuth/Consumer.php';

try {
  $twitter = new Services_Twitter();
  $oauth   = new HTTP_OAuth_Consumer($consumer_key,
                                     $consumer_secret,
                                     $auth_token,
                                     $token_secret);
  $twitter->setOAuth($oauth);
  $twitter->statuses->update('なうなう');
} catch (Services_Twitter_Exception $e) {
  echo (string)$e;
  exit;
}

cockok PHP, 日記 , ,

twitterAPIを利用する際にOAuthを利用できなくいけどsource変更したいよとメールしてみた

3月 2nd, 2010
No comments

もし、OAuthを利用できない特別な理由がある場合、deprecatedな方法となりますが、Alexにアプリケーション名をメールして、sourceパラメータで指定された該当のアプリケーション名を受け取るよう設定を頼みましょう。
Twitter API – TwitterまとめWiki

というわけで送ってみたけど、以下の返信がきたよ。

Hi XXXX,

Unfortunately, applications that do not use OAuth authentication cannot have source parameters at this time. We are working to improve OAuth so mobile applications can easily integrate it, and I sincerely apologize for the inconvenience in the meantime.

Thanks for your understanding,
Brian

残念。

xAuthで変更できそうなのでそっち試し中。
Twitter API Wiki / Twitter REST API Method: oauth access_token for xAuth

cockok twitter

PEAR::Services_Twitterのリスト対応

3月 1st, 2010
No comments

※3/2 更新
パッチファイル
http://blog.cheki.net/Services_Twitter.patch.gz

追加メソッド一覧

Methods                 Documentatation name        tests
----------------------- --------------------------- ---------------------------------------
trends/available                                    840-trends-available.phpt
trends/location                                     850-trends-location.phpt
lists/create            POST lists      (create)    153-lists-create-delete.phpt
lists/update            POST lists id  (update)     151-lists-update.phpt
lists/list              GET lists        (index)    150-lists-list.phpt
lists/show              GET list id      (show)     152-lists-show.phpt
lists/delete            DELETE list id (destroy)    153-lists-create-delete.phpt
lists/statuses          GET list statuses           160-lists-statuses.phpt
lists/memberships       GET list memberships        161-lists-memberships.phpt
lists/subscriptions     GET list subscriptions      162-lists-subscriptions.phpt

list_members/list       GET list members            181-list_members-list.phpt
list_members/create     POST list members           180-list_members-create-delete.phpt
list_members/delete     DELETE list members         180-list_members-create-delete.phpt
list_members/show       GET list members id         182-list_members-show.phpt

list_subscribers/list   GET list subscribers        191-list_subscribers-list.phpt
list_subscribers/create POST list subscribers       190-list_subscribers-create-delete.phpt
list_subscribers/delete DELETE list subscribers     190-list_subscribers-create-delete.phpt
list_subscribers/show   GET list subscribers id     192-list_subscribers-show.phpt

ファイル全部

http://blog.cheki.net/Services_Twitter.tar.gz

パッチは現段階での最新である295629に当ててください。

$ svn co -r 295629 http://svn.php.net/repository/pear/packages/Services_Twitter/trunk Services_Twitter
$ wget http://blog.cheki.net/Services_Twitter.patch.gz
$ gzip -d Services_Twitter.patch.gz
$ cd Services_Twitter
$ patch -p0 < ../Services_Twitter.patch
$ php tests/AllTests.php
PHPUnit 3.4.11 by Sebastian Bergmann.

..................................................

Time: 4 seconds, Memory: 10.25Mb

OK (50 tests, 0 assertions)

OK, but incomplete or skipped tests!
Tests: 50, Assertions: 0, Skipped: 1.

tests-config.phpセット後。

$ php tests/AllTests.php
PHPUnit 3.4.11 by Sebastian Bergmann.

..........S....F.......S.....S..........S.....F.S.

Time: 42 seconds, Memory: 10.25Mb

There were 2 failures:

1) /home/cockok/projects/Services_Twitter/tests/460-account-update_profile_image.phpt
--- Expected
+++ Actual
@@ @@
-bool(true)
+bool(false)

/home/cockok/projects/Services_Twitter/tests/AllTests.php:56
/home/cockok/projects/Services_Twitter/tests/AllTests.php:72

2) /home/cockok/projects/Services_Twitter/tests/470-account-update_profile_background_image.phpt
--- Expected
+++ Actual
@@ @@
-bool(true)
+あなたが設定した背景用の画像に問題があるようです。おそらく大きすぎです。 (code: 403, call: http://api.twitter.com/1/account/update_profile_background_image.json)

/home/cockok/projects/Services_Twitter/tests/AllTests.php:56
/home/cockok/projects/Services_Twitter/tests/AllTests.php:72

FAILURES!
Tests: 50, Assertions: 0, Failures: 2, Skipped: 5.

画像周りでエラーでてるけどもともと出てるんでシラン。

cockok PHP , ,

symfony1.0,propelメモ

2月 15th, 2010
No comments

もうsymfony1.0、propel使うことそんな無いだろうけど、使う時に使い方探すの面倒なのでメモ。

PHP
// (started_at <= now() OR started_at IS NULL)
$c->add($c->getNewCriterion(self::STARTED_AT, $now, Criteria::LESS_EQUAL)->addOr($c->getNewCriterion(self::STARTED_AT, null)));

cockok PHP ,

TwitterAPIを利用したプロフィール画像更新はcontent-typeがimage/*じゃないとコケる

2月 3rd, 2010
No comments

TwitterAPIを利用したプロフィール画像更新はcontent-typeがimage/*じゃないとコケる。
正確にはステータス200が返ってくるけど、更新されないからもっとタチが悪い。

Twitter API Wiki / Twitter REST API Method: account update_profile_image
curl、rubyによるサンプルコードが載ってるけど、「Expect」ヘッダは不要。

PEAR公式のServices_Twitterを利用していたが、update_profile_imageが上手くいかない。
まだドキュメントが整理されていないので、ソースを読むかテストをみて、利用法を確認したが問題なし。
リクエストをトレースしてみたところ、content-typeが「application/octet-stream」だったのが気になったので「image/jpeg」にしてみたところ、画像の更新に成功。
PEAR::HTTP_Request2でmime-typeが取得できなかった場合、「application/octet-stream」がセットされていたというオチ。

pecl::Fileinfoかmime_content_typeを利用するようになっていたけど、–with-mime-magicとかコンパイル時に指定していなかった件。

cockok PHP , ,