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, 日記 pear, PHP, xAuth
もし、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
※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 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)));
cockok 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とかコンパイル時に指定していなかった件。
cockok PHP PHP, services_twitter, twitter