2010/08/22

プロフィール変更できないのは不具合でもなかったようだ

下記ブログにさんざん書いている件、わかりました。
API叩く先のURLが違った(Twitterさん推奨のものでなかった)という話…



× http://twitter.com/account/update_profile.xml
○ http://api.twitter.com/1/account/update_profile.xml

昔までは上のURLで動いていたのですが、ある日を境にそれを廃止したという話のようで。

付け焼刃でやるなということをまたもや痛感でした。

さて、これで晴れてプロフィールアイコン変更ができるようになりました♪
…が、今度はプロフィールの名前変更部分でつまりちゅう。
まだ戦いは続きそうです。

2010/08/07

プロフィール画像変更できない不具合継続中らしい

連続投稿ごめんなさい。
本日時点でまだ復旧してないそうです。

具体的には、「account/update_profile_image」のAPIでの挙動がおかしいです。
これは毎日確認するしかないな…と確認用サイトまとめておきます。

ちなみに今の挙動は
  • 画像POSTは正常終了のように見せかけられる
  • しかし画像は「×」で表示される
  • 画像を右クリックし「プロパティ」で画像のURLを確認する。確認したURLを叩いてみると下記のようなエラーが表示される

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>58CBA5274BA1844B</RequestId><HostId>t2KEB4m3gTJOMl+3M+/bhMenrAxKWRG/Vc0wetCHLKPsWB+KlRCZknDmsvelZb7t</HostId></Error>

IIS+PHP(FastCGI)でEasyBotterを動かす

前までの記事の続き。
PHPが動くところまでいったが、いざEasyBotterを動かしてみると、よくある? 下記エラーが表示されました。

PEAR/HTTP/OAuth/Consumer/Request.php on line 214
まぁはじめから、extensionが足りんでエラーになるのは目に見えたので自鯖立てたわけで。
足りなければ自由に追加できるし、動かしてやるーとぽちぽちやりました。

ひとつひとつ検証したわけではないですが、以下のExtensionを入れると動作しました。たぶんいらないもの多数あるかと(地道に調べるのは面倒なので容赦してください)
とりあえずマイPCでテスト用でEasyBotterが動けばそれでいい! という人は参考にしてください。

【いれたExtension】
├Scripe Executable
├Extentions
│ ├Curl
│ ├ GD2
│ ├ Multi-Byte String
│ ├ Mhash
│ ├ Mimetypec
│ ├ Openssl
│ ├ Pspell
│ ├ Sockets
│ ├ Sybase
│ ├ XML+RPC
│ ├ XSL
│ ├ zip
└Extras
└ PEAR install

以下、補足(というか追加の仕方)
Extensionの追加ってどうやるん? って言うのは、PHPをインストーラでいれた場合は、「プログラムの機能」から追加することができます。
ZIPから圧縮解凍してPHPを構築した場合は、php.iniで該当するdllのコメントアウトを外せばよいかと思います。

手順
(1)「プログラムの機能」からPHPを選択し、「変更」を押す










(2)インストーラの指示に従い次へ。三つボタン出てきたら「change」で
(3)どのCGIですかは「FastCGI」のまま
(4)有効にするエクステンションを聞かれるので、必要なものをオンにしていく









(5)インストーラの指示に従い次へ次へで完了させる
(6)IIS再起動




ご参考:うちの環境
WindowsVista Home sp2
PHP Version => 5.2.14(インストーラからインストール)
EasyBotter2.04beta

構築四苦八苦はこっちの記事参照↓
結局自分とこにPHPを立ててみる。

結局自分とこにPHPを立ててみる。

ずっと言ってたTwitterBOTでのプロフィール画像変更処理の続き。
例のAPIの件は復旧したようなので(※2010/8/7現在復旧してません)相変わらずがりがりとやってみてるんだけど、やっぱりプロフィール変更がうまくいかない。
もしかしたらatPagesがダメなの?(atPagesのサービス仕様で外部ファイル呼び出しNGがあるがこれが関係している???)
…というわけでスクリプトが悪いのかatPagesが悪いのかを切り分けするため、自分PCにPHPをたててみることにした。
なんかものすごく回り道してますが…

WindowsVista(Home)+IISという環境での構築になりました。
えっと、罠が罠でなかなか動かず大変でした。
いろいろやりすぎてgdgdですが、うまく動かなかったときの切り分け参考でキーワード載せときます。
技術性にはかけるので、気になったキーワードでぐぐってください(なんという丸投げ)

(IISのインストール系は省きます。ぐぐれば良いページ一いっぱい見つかります)
(インストールしたPHPは 5.2.14。「Non Thread Safe」のインストーラでインストール)

■isapとFastCGI
Vista環境なのでFastCGIを使うでOK。よくわからず「php5isapi.dllがないよぉ」と嘆いてはみたが不要だった。
IISのハンドラマッピングで「php-cgi.exe」で動かします、とすればOK。
↑PHPインストーラ版だと勝手にやってくれていた。

■インストール先は故意に変更する
デフォルトインストール先が「C:\Program Files\PHP」になりますが、先人の知恵によるとあまりよくないっぽいのでパスに空白がないところにインストールしましょう。パスに空白はトラブルの元。

■動作確認で「phpinfo()」が動かない
私はこれでドハマリしました。
手順としては
1)http://localhost/にアクセスするとIISのようこその青い画面が出る
2)C:\Inetpub\wwwroot直下にphpinfo();だけを書いたPHPを置く。ファイル名「info.php」
3)http://localhost/info.php にアクセスする

(3)で真っ白になった。

●確認事項
・ドキュメントパスが誤ってないか?
 「C:\Inetpub\wwwroot」直下にてきとーなhtmlを起きそこのURL叩いて表示できる? →できた。問題なさそう
・php.ini読めてるの?
 コマンドプロンプトで「"C:\PHP\php-cgi.exe" -i」を叩くと、phpinfo()をブラウザで表示する時と同じHTMLを標準出力できるっぽい。
 (exeのパスはPHPインストールパスに読み替えてください)
 こちらで確認したところ「Loaded Configuration File」でちゃんとiniを読んでいることが確認できた。 →問題なさそう
・phpinfo();のファイル…このように書いてません?

<?
phpinfo();
?>

 こうしていてかつ、php.iniにて「hort_open_tag = Off」と設定している場合(しかもこれデフォルト)、PHPの開始文字列を「<?php」と書かないとPHPと認識しないらしい!!
 たしかになんだかプレーンテキストっぽかった。
 なので、info.phpを

<?php
phpinfo();
?>

 に修正しブラウザから叩くと… →できた~!!
 PHPinfoを表示させることができました。
 

環境が悪いのかIISが悪いのかVistaの死ぬほどうざい強力なセキュリティが邪魔してるのかノートンが悪いのかと四苦八苦しましたが、まさかテスト用PHPファイルが悪いとは思わず、ここに行き着くのに大変苦労しました…。
付け焼刃でいじると駄目ですね。根本的に理解する努力が必要ですね。


ともかくここまで…あとは本題のBOT動かすだけだ。前途多難orz

2010/08/01

TwitterBOT制作日記その3 ~リプが先だと動かない?~

例のAPI制限はまだ解除されないみたいですね。orz

リプライの実装がだいたい完了。
リプライの台詞によっては、ちょっと特殊な動きをさせるため、EasyBotter.phpはどんどこカスタマイズしております。怖い怖い。

で、通常順番台詞とリプライを実装するために、bot.phpのなかで「postRandom」関数と「reply」関数を呼び出すわけですが、(postRandomは一時間に一回などにするために条件判定加えますが)、これをサンプルで描かれている順番と逆にして

$response = $eb->reply(2,"data.txt","reply_pattern.php");
$response = $eb->postRandom("data.txt");
こう書くと、下記のようなエラーが出てしまうのですよ

object(SimpleXMLElement)#10 (2) {
["request"]=>
string(20)
"/statuses/update.xml"
["error"]=>
string(19) "Incorrect signature"
}

なお、「postRandom」を呼んだあとに「reply」呼ぶにはエラーにならず、謎でした。
「Incorrect signature」でググったらOAuthがらみのエラーの様子…? とりあえず上記でやりたいことは実装できたので詳細は調べませんでした。
なんなんでしょうねぇ…。窮地に陥ったら調べます。