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;
}
PHP, 日記
pear, PHP, xAuth
※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.
画像周りでエラーでてるけどもともと出てるんでシラン。
PHP
pear, PHP, twitter
もう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)));
PHP
propel, symfony
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とかコンパイル時に指定していなかった件。
PHP
PHP, services_twitter, twitter
PHPでtwitterを利用する場合にはServices_Twitterが便利です。
このServices_Twitterですが、公式のPEAR公式と野良(?)版が存在します。
openpear版はさっき見つけたけど、ちょっと使う気になれないので選択肢としてはPEAR公式か悠希さん版。
環境がCentOS5系、PHP5.1系だったので、悠希さん版を検討したのですが、CodeReposに入れられてるもののほとんど更新されておらず、APIが増えてる現状を考えると作業量的に厳しいということでPEAR公式を利用することに。
Services_Twitter-0.1.0 betaがリリースされたので日本のと比較してみた – 肉とご飯と甘いもの @ sotarok
この頃と状況は結構変わっていて、json必須ではない(でも速度の関係でpeclのjsonを利用)、HTTP_Request2でsocket通信とかになっています。
結構珍しい造りになっていて、api群はdata/api.xmlで管理されています。
pearコマンドを利用せずに利用する人は注意が必要。
PHP
PHP, services_twitter, twitter