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がらみのエラーの様子…? とりあえず上記でやりたいことは実装できたので詳細は調べませんでした。
なんなんでしょうねぇ…。窮地に陥ったら調べます。

2010/07/24

TwitterBOT制作日記その2 ~API側の一時的制限~

現在作成中のBOTは、二人のキャラが1つのbotで同居したようなものを考えています。
会話をさせたりさせなかったりする予定。
(本来、それぞれのキャラでアカウント作って、リプライを飛ばしあうのが正道かと思われますが、それができない事情があるのです)

というわけで、キャラA,Bどちらが喋っているのかを明示的にするために、しゃべる都度アイコンを入れ替えるという処理をしようと思いまして、それを実装に励んでいるわけですが。
どんだけやっても、プロフィール画像変更処理がうまくいかない。
画像はアップされている挙動だが、Twitter上では「×」と表示される。

なんだ元画像が壊れてる? いやいや普通に見えるし、パスが間違ってる? いや間違ってたらPHPエラーだし、MIMEタイプのミス? いやミスっても正常でもダメだなぁ…
と悩んでいたところ。

どうも、TwitterAPI側がAPIでのプロフィール変更処理を一時的にストップしている模様で。
http://status.twitter.jp/
なるほどそりゃできんわな、と脱力した次第であります。

一方で思ったことは。
最近高負荷でクジラもよく出現するTwitterですので、こういったAPIの制限を仕掛けてくるということも今後少なくないかもしれません。
(サーバをデータセンターに移してどうとかいう話もありますが、サーバをいくら増強しても限界には限界があるわけで)
こういった事象がおこりうることを考慮した上でBOT制作するべきなのかな…とか、考えてしまいました。

----
以下、つぶやきというかちょっとした思いですが。
最近負荷を考慮してない気軽なBOTが多いのかなーとか思ったりしつつ。
EasyBotterならPHP知らなくても、TL反応も自動フォロー返しも簡単に実装できてしまいます。(それだけ簡略化したものを提供してくださる作者様に感謝感謝ではあります。なにぶん私もPHPは初心者)
TL反応といえば、自TLを取得するAPIを叩いているわけですし、自動フォロー返しはおそらく(ソースを読み解いたわけじゃないのでウソかもですが)、フレンドリストとフォロワーリストの差分をとって不足をフォローするといった処理をしているのではと思います。ここでもAPI二回叩いている。
cronを2分でやっていれば、2分毎にこの処理が走るわけです。空振ったとしてもAPIが叩かれるのには変わりはありません。

自動フォロー返しは2分間隔で行う必要があるのでしょうか。
TL反応は意見が分かれそうですが、2分単位にストーキングしなくてもいいのではないかなーと思います。

このあたりの実装をもう少し考慮すれば(例えば自動フォロー返しは一日一回にする、とか)、その分Twitterのサーバには優しくなるのかなと思ったりしています。

大量のキャラBOTが2分間隔でこれらのAPIを叩きに行ったらそりゃ負荷も増えるわな、落ちるわなとか思っちゃうわけです。
なので、少しでもTwitterのサーバに優しい設計が出来ればいいのかなぁとか考えております。
(もちろんcronで回すサーバもPHP稼働サーバも負荷は考えるべきなのだけれども)

一番いいのは作らないことじゃね? というツッコミはなしで…うん、それはよく分かってるのでorz

2010/07/20

TwitterBOT制作日記その1

BOTを作るべく、カスタマイズしやすそうな「EasyBotter」を借りてみることに。
http://pha22.net/twitterbot/

実績あるサーバもWikiのほうに載ってますが、まず手持ちのものでできないか確認してみました。
結果、NGだったサーバの備忘録w


■ぷらら
ホームページ持っておりCGIスペースも持ってます。
公式には乗ってませんでしたがどうやらPHPが動くみたい。(.phpファイルが動いた)

ただし、PHPのバージョンが4.X.Xだった(詳細失念)ため、EasyBotter2は動きません。
1.4を試しに置いたけどNGでした(なんか動かない)

まぁ非公式だしいっかと。

■000webhost.com
こちらもホームページとして借りています。また、PHP5対応とのことでwktkしながら動かしてみました。
結果NG。
↓と同一の現象が発生してしまいました。
http://www26.atwiki.jp/easybotter_wiki/pages/21.html#id_aa5eb401

また、000webhost.comでは対応していない関数をPEARで使用しております。(具体的には「ini_set()」)
こいつを外せばうごくんじゃね? と楽観視してもダメでした。

というわけで上記2サーバは諦め、実績あるサーバでレンタルして動かしてみることにします。
@PAGESさんがレンタルできたので、そちらでやってみます。

きょうはここまで…