[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/26 21:14 / Filesize : 264 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Twitter】 BOT製作支援スレ



1 名前:nobodyさん [2009/09/27(日) 14:15:59 ID:Dz08qoo4]
見当たらなかったので立ててみた

[公式] twitter.com/
[Twitter 開発ブログ 日本語版] twitterjp.blogspot.com/

*どの言語でもOKですがソースを書く際は何の言語なのかも記載してください。
*初心者のために、なるべくぶつ切りのソースではなく全体的に載せてほしいです。


800 名前:nobodyさん mailto:sage [2010/01/05(火) 00:47:23 ID:???]
>>797
794です。自分も>>799と同じくエラーが出ずAPIの状態…
curlを削ってもいいと聞いたので少しずつ削ってその都度試してみたけど駄目だった

801 名前:nobodyさん mailto:sage [2010/01/05(火) 00:47:51 ID:???]
FileQいいなと思うけどcurlが駄目ってとこで引っかかるのが辛いな

802 名前:nobodyさん mailto:sage [2010/01/05(火) 01:37:59 ID:???]
curlだけじゃなく他にもダメなのありそうだしな。

803 名前:nobodyさん mailto:sage [2010/01/05(火) 01:38:48 ID:???]
OAuthは認証した後はbasic認証後と同じようにAPIに投げればいいのかな

804 名前:nobodyさん mailto:sage [2010/01/05(火) 03:15:16 ID:???]
リプライとかTLはポスト部分だけOAuthに投げてそれ以外は以前のままで使ってる

805 名前:nobodyさん mailto:sage [2010/01/05(火) 04:34:41 ID:???]
SDNさんのOAuthでのAPI偽装スクリプト使わせてもらおうと思ったんだけど
PHPでOAuthを使う準備の所で、test.php叩いても真っ白い画面でソースも何も出てこないエラーになる
使ってる鯖はステップサーバーでPHP5、対応してないスクリプトなのかと思ったけど
他の同じような環境の鯖で叩くと

・ソ
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /usr/home/akairin5/public_html/twitterOAuth.php on line 21

というエラーが帰ってくる
しかし特に閉じ忘れなども無い気がするんだけど……

誰か同じようなエラーで対応した人いませんですか
色々と考えたけど、自分の経験値では完全に詰みました……

806 名前:nobodyさん mailto:sage [2010/01/05(火) 04:35:41 ID:???]
ふああああああああああああああああああああああああorz
しくじったアカウント消し忘れたorz
うう、見なかったことにorz
でも助言お願いしますorz

807 名前:nobodyさん mailto:sage [2010/01/05(火) 04:50:40 ID:???]
ここはうっかりさんが多いインターネットですね

808 名前:nobodyさん mailto:sage [2010/01/05(火) 09:46:47 ID:???]
>>805
どんまいとしか言えないwww
けど自分も真っ白のページが出てくることがたまにある



809 名前:nobodyさん mailto:sage [2010/01/05(火) 10:34:19 ID:???]
>>805
文字コード違うとか?

810 名前:805 mailto:sage [2010/01/05(火) 11:35:24 ID:???]
どんまいありがとうございますorz

>>809
最初にDLしたものをそのままUPしたらだめだったので、
文字コードをUTF-8、改行コードも念のためLF固定にして再UPしたんだけどダメで、
更に.htaccess置いてサーバーの方で改行コードを固定してもダメでした。

SDNさんのHP注意書きの様に、スクリプトのバージョン違いかとも思って
2度ほど該当バージョンの物をDLし直したんですがダメでした。

白くなるエラーは私も何度か遭遇して、その度に閉じ忘れとかが原因な事が多かったので
今回もそうなのかなぁと思ったのですが……
配布されているものに間違いがあるとは見た限り思えなくて…

ステップサーバーのPHP注意に、白くなるエラーは、PHP5に対応してないスクリプトの可能性アリ
というのがあったので、疑っても見ましたが、それも無いと思いますし……

謎です

とりあえず、自分でも、OAuth調べ中ですが、お心当たりある方居ましたら
ご助言お願いしますorz

811 名前:nobodyさん mailto:sage [2010/01/05(火) 12:04:38 ID:???]
うちのOAuthはよくサスペンドにされるんだけど…なんか問題あんのかなあ

812 名前:nobodyさん mailto:sage [2010/01/05(火) 14:17:40 ID:???]
ウチはSDNさんのところを参考に
定期発言もリプライも全部OAuth認証に変えてみたけど、設置もその後も順調だ
やっぱりサーバーとかの環境によってだいぶ差があるんだな

813 名前:nobodyさん mailto:sage [2010/01/05(火) 19:05:30 ID:???]
>>782 ノシ

814 名前:nobodyさん mailto:sage [2010/01/05(火) 21:16:43 ID:???]
こんなとこ見つけたんだけど、使ってる人いる?

ttps://mywebcron-com.loopiasecure.com/

815 名前:nobodyさん mailto:sage [2010/01/05(火) 22:09:45 ID:???]
>>814
cron-job.orgがダメになってそこに移った
@ページだとほとんど動かなかったから、他の鯖に変えたら動きだした
たまに起動しないけど無料なら想定の範囲内だと思う

816 名前:nobodyさん mailto:sage [2010/01/05(火) 22:23:38 ID:???]
あんまり広まるとまた規制されそうだが…
SetCronJobでぐぐると幸せになれるかもしれない

ところで、bardothodolさんのスクリプトが元のリプライソースでcurl使わずにOAuth化できますか?
2つあるpost関数のうち下方にあるcurlは削れてちゃんとクライアント名が変わったんだけど、
上の関数と$usernameと$passwordを削ったらpostできなかったんで、OAuth化できたのかできてないのか分からない状態です

こんな状態だけどクライアント名変えるだけでいいっていうならソースとか晒すけど…
FileQを使いたいので curl使わずにOAuth化できればいいな
どなたかご助言願います

817 名前:nobodyさん mailto:sage [2010/01/05(火) 22:36:06 ID:???]
あと少しで完成なんだけどTLに反応するやつだけ上手くいかない…


$oyasumi = array("台詞1","台詞2","台詞3");
$tadaima = array("台詞1","台詞2","台詞3");

if($reply_name != $username){
if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){
if(preg_match( "/おやすむ|おやすみなさい|おやすみます|寝る|寝ます/u", $var )){
$key = array_rand($oyasumi);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}

if(preg_match( "/ただいま|今.*帰ってき/u", $var )){
$key = array_rand($tadaima);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}

ここで下の反応語句いれても上ので反応してしまう
色々なところで調べたりいじったりしたんだけどちょっと症状が違うのか上手いこといかない
馬鹿らしいこと聞いているとは思うんですが手がつけれないので…
誰かわかる方いたらお願いします

818 名前:nobodyさん mailto:sage [2010/01/05(火) 22:56:20 ID:???]
>>817
中カッコが足りなくて閉じ切ってないのでなんともいえない。
しいていえばpreg_matchがおかしいんじゃない?
あとはちゃんとマッチしてるか確認するために
if($reply_name != $username){
if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){
if(preg_match( "/おやすむ|おやすみなさい|おやすみます|寝る|寝ます/u", $var )){

echo "oyasumi <br>";
$key = array_rand($oyasumi);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;

echo "$post $message<br>";
tweet($message ,$username,$password);
}
if(preg_match( "/ただいま|今.*帰ってき/u", $var )){

echo "tadaima <br>";
$key = array_rand($tadaima);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;

echo "$post $message<br>";
tweet($message ,$username,$password);
}

こんな感じでecho入れてブラウザ上で動かしてちゃんと反応するか調べる。ちゃんと動いていれば
oyasumi
台詞1 @reply_name 台詞1
みたいに出力されるはず



819 名前:nobodyさん mailto:sage [2010/01/05(火) 22:56:35 ID:???]
twitterOAuth.php自体にcurlが使われてるからSDNさんのとこの方法でOAuthにするとFileQでは動かせなくなっちゃうのかな…
FileQにみんなでcurl使えるように嘆願するか?w

それとスレチだけどなんで日本には外国みたいなwebcronサービスがないんだろ
お金かかってもいいからあったら便利なのに

820 名前:nobodyさん mailto:sage [2010/01/05(火) 23:02:52 ID:???]
>>817
「ただいま」の $post = $oyasumi[$key];
「おやすみ(oyasumi)」になってるよ

あと、

$oyasumi = array("台詞1","台詞2","台詞3");
$tadaima = array("台詞1","台詞2","台詞3");

if($reply_name != $username){
if( !preg_match ( "/@[a-zA-Z0-9-_]{3,}/", $var ) ){
if(preg_match( "/おやすむ|おやすみ|おやすみます|寝る|寝ます/u", $var )){
$key = array_rand($oyasumi);
$post = $oyasumi[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}
if(preg_match( "/ただいま|今.*帰ってき/u", $var )){
$key = array_rand($tadaima);
$post = $tadaima[$key];
$message = "@".$reply_name." ".$post;
tweet($message ,$username,$password);
}
}
}
$i--;
}

↑閉じ方をこうしてみた。
直るかどうかはこの前後のソース次第かもしれないけど…

821 名前:nobodyさん mailto:sage [2010/01/05(火) 23:06:38 ID:???]
>818
早速ありがとう!
ソース変なところからだった…ごめんなさい。
$i = count($XML)-1;
$j = 0;
while($i >= $j) {
$var = $XML->status[$i]->text;
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;

省略(さっきのソース)

}
}
$i--;
}
長いから省略しました。
これで閉じ切ってるかな…?

とりあえず教えてもらった方法やってまた頑張ってみます!

822 名前:nobodyさん mailto:sage [2010/01/05(火) 23:11:35 ID:???]
>820
うわっ!本当だ…すっごい恥ずかしいこれ
そこ直したら戻った気がする。一応返してきたからこれで様子見ます!
本当ありがとう…

823 名前:nobodyさん mailto:sage [2010/01/05(火) 23:18:50 ID:???]
>>819
リプライソースからcurlを消せばいいと思ってた…
そうか twitterOAuth.php自体にcurlがあったorz

5分間隔でいいならSet〜とかでいけるけど、やっぱ5分だと取得漏れが多い気がする
そしてwebcronでリプライ動かしたら破産する
自分で設定するしかないか

824 名前:nobodyさん mailto:sage [2010/01/05(火) 23:22:23 ID:???]
>>728あたりが安定した国内のcronサービスを作ってくれる とかいう夢を一瞬見た
無料は申し訳ないからできればカンパとかしたい

825 名前:nobodyさん mailto:sage [2010/01/05(火) 23:22:50 ID:???]
>>823
GAEは?

826 名前:nobodyさん mailto:sage [2010/01/05(火) 23:30:51 ID:???]
ググッたらこんなんあったけど、まだ試してない
ttp://blog.makotokw.com/2010/01/03/oauth%E5%AF%BE%E5%BF%9C%E3%80%81curl%E3%81%AA%E3%81%97%E3%81%A7%E5%8B%95%E3%81%8Fphp-twitter-library-php-twient%E3%82%92%E5%85%AC%E9%96%8B/

827 名前:nobodyさん mailto:sage [2010/01/05(火) 23:37:52 ID:???]
>>825
GAEにしようとしたんだが、Google App Engine Launcherを起動すると
See the logfire 'C:\〜GoogleAppEngineLauncher.exe.log' for details
というエラーが出るから積んだよ
再インストールしてもエラー中のlogを消してもだめだった
問題は山積みだ…

828 名前:nobodyさん mailto:sage [2010/01/05(火) 23:54:54 ID:???]
logの中身みたの?



829 名前:nobodyさん mailto:sage [2010/01/06(水) 01:25:16 ID:???]
>>828
logの中はこんな感じのが何行か…

Traceback (most recent call last):
File "GoogleAppEngineLauncher.py", line 42, in <module>
File "wx\_core.pyc", line 7913, in __init__
File "wx\_core.pyc", line 7487, in _BootstrapApp
File "launcher\app.pyc", line 53, in OnInit
File "launcher\app.pyc", line 97, in _CreateModels
File "launcher\maintable.pyc", line 35, in __init__
File "launcher\maintable.pyc", line 86, in _LoadProjects
File "launcher\project.pyc", line 63, in ProjectWithConfigParser
File "launcher\project.pyc", line 260, in _LoadFromConfigParser
File "ConfigParser.pyc", line 520, in get
ConfigParser.NoOptionError: No option 'name' in section: '1'

さっぱりなのでweb上のcronに頼ることにするよ
聞いてくれてありがとう

830 名前:nobodyさん mailto:sage [2010/01/06(水) 15:02:29 ID:???]
オプションのnameがないんじゃね?

831 名前:DAWNTO_Windy-melt ◆Windy/f9HNwg mailto:sage [2010/01/06(水) 15:53:39 ID:???]
>>824
わざわざありがとうございます。
本格的に設計開始しましたが、あったらうれしい機能など教えていただけると開発が早く進みます

832 名前:nobodyさん mailto:sage [2010/01/06(水) 20:41:01 ID:???]
>>831

横レスだけど
cronjobみたいなシンプルなコンパネがあるとうれしいな

833 名前:nobodyさん mailto:sage [2010/01/07(木) 02:21:36 ID:???]
>>831
楽しみにしてます
かなりのユーザーがいくと思うので負担が大きいかもしれませんが…

cron-job.orgのようにCtrlで時間を細かく選択できたら便利かと思います
時間は1〜2分間隔希望です

834 名前:nobodyさん mailto:sage [2010/01/07(木) 02:37:41 ID:???]
>>831
もし有料にする場合は、銀行振込にも対応してほしい。
クレカ無いから…。

835 名前:nobodyさん mailto:sage [2010/01/07(木) 09:20:32 ID:???]
この流れはひどい

836 名前:nobodyさん mailto:sage [2010/01/07(木) 10:59:33 ID:???]
bot製作とは程遠いな

837 名前:nobodyさん mailto:sage [2010/01/07(木) 12:01:35 ID:???]
ド素人の質問ですみません。
Kotobuki Lab.さんのページを参考にしてGAEでcronを実行したいのですが
プロジェクト名すら作成例と同じにして丸コピしているのに、うまくいきません。
同じページを参考にしてうまくいった方はいますか?
変えているのはtestcronServlet.javaの11行目、testcronServletをTestcronServlet
にしたのと、botのURLだけです。
現在Logsでは2分おきにWarning No handlers matched this URL.が出っ放し、
Cron Jobsでも常にon time failedとなっています。←これがどういう状態なのかもいまいちつかめてません…
ぐぐったら海外で同じ状態のひとを見つけたのですが、具体的な解答はなされていないようなので、
どうか助言をお願いします。

838 名前:nobodyさん mailto:sage [2010/01/07(木) 13:07:48 ID:???]
>>837
そのページ見てGAEにチャレンジしたけどうまくいったよ
○○Serblet.javaのファイル名は頭1文字目が大文字じゃないと上手くいかなかった気がする



839 名前:nobodyさん mailto:sage [2010/01/07(木) 13:08:57 ID:???]
スペルミスってた
Ser「b」letじゃなくてSer「v」letね…

840 名前:nobodyさん mailto:sage [2010/01/07(木) 14:39:50 ID:???]
>>837
Warning No handlers matched this URL.
ってことはURLが間違ってるって事じゃないのかな
アドレス間違ってるかもしくはGAEからのアクセス弾いちゃってるとかじゃない?

841 名前:nobodyさん mailto:sage [2010/01/07(木) 15:21:15 ID:???]
>>837>>840
プログラムのURLが合ってても、cron.xmlの方で指定間違えてたら
Warning No handlers matched this URL.って出るよ
>>837はもう一度パス見直してみ

842 名前:nobodyさん mailto:sage [2010/01/07(木) 23:18:40 ID:???]
>>814
全然動かないんだが...

843 名前:nobodyさん mailto:sage [2010/01/07(木) 23:26:01 ID:???]
FileQとphpだけで人間によく間違えられるbot作った俺が通りますよー

844 名前:nobodyさん mailto:sage [2010/01/07(木) 23:57:56 ID:???]
>>843
自慢したいだけなら二度と来ないでください

845 名前:nobodyさん mailto:sage [2010/01/08(金) 00:42:38 ID:???]
>>844
リプライ返しはあいさつに対してのみ行う場合なら人間っぽいbot簡単に作れるよー。

まず「つぶやき収集bot」を作って、あらゆるツイートを収集し、リプライツイートや時々内容のツイートを取り除きテキストファイルに順に格納していく。

時々内容のツイートを取り除く方法は、まずニュースサイトの記事をyahooの形態素解析APIを使って名詞を抜き出し辞書を作っておく。
そして「つぶやき収集bot」が収集したツイートも形態素解析し名詞を抜き出し、あらかじめ作った辞書を検索しその名詞が見つかればそのツイートは取り除く。

あとはテキストファイルに格納したツイートを適当に抜き出ししゃべらせる。

846 名前:nobodyさん mailto:sage [2010/01/08(金) 00:47:33 ID:???]
問題は人間の質問に答えられるbotをどう作るかだろう。
あるいは人間とマトモな会話ができるbot。

これはかなり時間がかかりそうだ。

847 名前:nobodyさん mailto:sage [2010/01/08(金) 01:51:52 ID:???]
手間をかけずに楽しめるbotを作る方がおもしろい。

848 名前:nobodyさん mailto:sage [2010/01/08(金) 02:14:44 ID:???]
自分に向けられた発言への類推は難しいよな。
品詞ごとに分けておおまかな意味を推測させようかと考えてはみたが

>>846
マトモに会話してるように見えるbotなら人工無脳にいくつかあるけど
あれらを今から作るってのは手間だしマルコフ連鎖で繋げてそれっぽく見せるのがせいぜいだろうな。
辞書登録してやるとどうしても反応できるワードには限りがあるし。
本気で知能やろうとするとと個人でやるには大変だ。



849 名前:nobodyさん mailto:sage [2010/01/08(金) 02:48:09 ID:???]
さくらサーバーでTLに反応するPHPのcron動かしてる人っていますか?
リプライとかは平気なのにTL反応のcronだけ削除されてしまいます
中身は銀さんのをほぼ丸写ししただけ。なにが悪いんだろう?


850 名前:nobodyさん mailto:sage [2010/01/08(金) 04:10:34 ID:???]
>>849
cronの実行間隔が短すぎるんじゃねーの?

851 名前:nobodyさん mailto:sage [2010/01/08(金) 04:35:57 ID:???]
>>850
リプライは3分おきで動いてるのにTLは10分にしても消されました
もっと長くすれば大丈夫かもしれないけどTL反応の間隔が10分以上では遅すぎるし・・・

852 名前:nobodyさん mailto:sage [2010/01/08(金) 04:58:44 ID:???]
さくらに聞けよ

853 名前:nobodyさん mailto:sage [2010/01/08(金) 05:32:19 ID:???]
>>851
周期が1時間以内だと、消される方が正常
3分で消えないっておかしいな

854 名前:nobodyさん mailto:sage [2010/01/08(金) 06:00:29 ID:???]
>>853
そうなのか・・・じゃあさくらサーバー使ってる人でもcronは別な所で動かしてるってことなんですかね?
リプライは平気なのにTLはダメっていうのが不思議だけど、諦めて他の方法で動かすことにします

855 名前:nobodyさん mailto:sage [2010/01/08(金) 08:05:52 ID:???]
>>848
俺の目標は、ある人が人間と思ってフォローした人たちが全員botだった、という状況を作ることなのだよ。

856 名前:nobodyさん mailto:sage [2010/01/08(金) 08:14:21 ID:???]
遅くなりましたが>>837です
>>841さんのいうcron.xmlでの指定ミスが原因だったようで、urlのところを直したら
すんなり動いてくれました。web.xmlからURLを確認する過程自体をすっとばしていたという、
なんともお粗末な理由でした…
助言をくださった方、ありがとうございます。botが動いて感激です。

857 名前:nobodyさん mailto:sage [2010/01/08(金) 10:56:08 ID:???]
cron-job.orgからGAEに変えたんだけど、
GAEのログにファビコンが無いっていうエラーが出まくる
何かファイル追加してファビコンを指定すればいいらしいんだけど
具体的な方法がわからない…どこかに参考になるサイトとかないかな?

858 名前:nobodyさん mailto:sage [2010/01/08(金) 12:15:40 ID:???]
>>854
さくらだけど消されてないよ。
GAEで動かしてるからかな?

>>857
ブラウザでアクセスするのやめる



859 名前:nobodyさん mailto:sage [2010/01/08(金) 12:18:38 ID:???]
あ、すまん。
さくらの人が消されたのはcronの方か。
勘違いしてた

860 名前:nobodyさん [2010/01/08(金) 17:10:10 ID:voJUVX7V]
ごめん、OAuthの話に戻るんだけどさ
SDNさんを参考にして、定時はいけたんだけどリプライとTLがいまいちなんだ。
エラーも出ないでクライアント名とかリプライ元つきで返してくれているんだけど、
なんか叩くとめっちゃ返してくる…
前に答えたやつにも重複して返すし、tmpがうまく読めてないんかな。
初心者ですまない…元々銀次さんの所のコピペに頼りきりだったからどうしてすれば良いかわからないんだ。
教えてくれると凄く幸せになれるんだが…

861 名前:nobodyさん mailto:sage [2010/01/08(金) 17:41:13 ID:???]
>>860
銀さんとこのリプライソースでいいんだな?
リプライソースの中の

$ch = curl_init();
(中略)
curl_close($ch);

を全部消して、function tweetをSDNさんとこのソースに
tweetの引数は$message以外を削除、って感じで行けると思う
もちろん細かいところは適宜修正してくれ

862 名前:nobodyさん [2010/01/08(金) 17:57:17 ID:voJUVX7V]
>>861
ありがと。
でもごめん、その通りにしたら
<?xml version="1.0" encoding="UTF-8" ?>
- <hash>
<request>/statuses/update.xml</request>
<error>Incorrect signature</error>
</hash>
て@ページでエラーでたんだけどorz
function tweetの中が間違ってるんかな。
それともrequire_onceの場所がおかしいとか…?
もう訳わからんよ…細かいところの修正が出来てないからかな。
頭悪くてごめんな。
一回貼ったほうがわかりやすい?

863 名前:nobodyさん mailto:sage [2010/01/08(金) 18:02:23 ID:???]
>>862
見た方が早いことは早いかも

864 名前:nobodyさん mailto:sage [2010/01/08(金) 18:13:36 ID:???]
>>862
あーごめん
$ch = curl_init();
(中略)
curl_close($ch);
は消さなくてもいいや(OAuth認証でTL取得しない場合は)

消した場合(OAuth認証でTLを取得する場合)は
$XML = simplexml_load_string($result);
のところも変えないと駄目

865 名前:nobodyさん [2010/01/08(金) 18:32:53 ID:voJUVX7V]
>>864
お、ごめん長くて貼れなくて苦戦してた…
$XML = simplexml_load_string($result);
の部分なんだけど、ごめんどういじれば良い?

866 名前:nobodyさん mailto:sage [2010/01/08(金) 18:44:15 ID:???]
SDNさんとこのをそのまま使うんならこんな感じかな。ソース汚いけど
if(!empty($line)){
$last_id = $line;
}else{
$cnt = "1";
}
$consumer_key = "consumer_key"; // Consumer keyの値
$consumer_secret = "consumer_secret"; // Consumer secretの値
$access_token = "access_token"; // Access Tokenの値
$access_token_secret = "access_token_secret"; // Access Token Secretの値
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterからGETする
if(($cnt != null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("count"=>$pcount,"since_id"=>$last_id),"GET");
}else if(($cnt != null)&&($last_id == null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt),"GET");
}else if(($cnt == null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("since_id"=>$last_id),"GET");
}else{
$req = $to->OAuthRequest($host,array(),"GET");
}
$XML = simplexml_load_string($req);

867 名前:nobodyさん mailto:sage [2010/01/08(金) 18:45:34 ID:???]
うおっと、またミスった
$pcountになってるところは$cntで…orz

868 名前:nobodyさん [2010/01/08(金) 20:09:05 ID:voJUVX7V]
>>867
うわーごめん、何かほんと頭悪いみたい。
TLとかリプライいじってみたけど、返事しないわ…orz
そもそも基本的なこと間違えてる気がしてならない…
ちょっと基本的な事勉強してくるわ、協力してくれてありがと。



869 名前:nobodyさん mailto:sage [2010/01/08(金) 23:45:40 ID:???]
銀次さんのとこの方法は重くなるからcronに向かないな。
さくらで勝手に削除されたのもそのせいだと思う

問題はその重いスクリプトを多くの人が参考にしてるってことだ

870 名前:nobodyさん mailto:sage [2010/01/09(土) 00:01:26 ID:???]
自分でOAuthの実装してたんだけど、
アクセストークンと認証トークンの取得までいけた。
で、APIアクセスしようとおもったら
Incorrect signatureっていわれた

これってoauth_signatureの作り方が間違ってるのかな?

871 名前:nobodyさん mailto:sage [2010/01/09(土) 00:08:52 ID:???]
>>870
自分もその表示が出て、対処方法が全然判らなかったから
一度全部消して、また最初からやり直したらいけたよ。
全然参考になってないけど…体験者より。

872 名前:nobodyさん mailto:sage [2010/01/09(土) 00:09:55 ID:???]
>>871
マジか・・・

873 名前:nobodyさん mailto:sage [2010/01/09(土) 00:15:30 ID:???]
ついったは人工無能の分野でも研究対象になんのかな

874 名前:nobodyさん mailto:sage [2010/01/09(土) 00:19:34 ID:???]
ぜんぜんならない、効率悪い。

しかし、話題性があるから薄っぺらな内容でも
凄い事のようにマスコミが持ち上げてくれる。

875 名前:nobodyさん mailto:sage [2010/01/09(土) 00:26:56 ID:???]
シグネチャ作るときのURLが固定だったのが原因だった
直したらTweetできたやったあああああああ

876 名前:nobodyさん mailto:sage [2010/01/09(土) 01:43:50 ID:???]
>>869
PHPにアクセスするとしょっちゅうタイムアウトエラーが出るんだけど、これもそのせいかな?
そのおかげでcronがちゃんと動いていてもポストされないみたいなんだ

877 名前:nobodyさん mailto:sage [2010/01/09(土) 02:05:23 ID:???]
>>876
869じゃないけどたぶんそのせいだと思う。
cron-jobはただ単に指定したURLを叩くだけだったから、特に削除されるとかないし組み合わせ的には最適だったと思うよ。

878 名前:nobodyさん mailto:sage [2010/01/09(土) 04:04:37 ID:???]
>>860-868あたりを読んで自分なりに実装したんだけどちっとも動いてくれない…。

//ポスト部分の関数


// OAuthオブジェクト生成

$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret,$message);


function tweet($username,$password,$id)

{

$message = urlencode($message);

$ch = curl_init();

★$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>"$message"),"POST");

curl_close($ch);

}

header("Content-Type: application/xml");

echo $req;

という風にしたら「Fatal error: Call to a member function OAuthRequest() on a non-object in★の行」というエラーが出てきてしまう…。
OAuthでリプライできてる方、ポスト部分はどうなってますでしょうか。
鯖はロリポでPHP5みたいです。



879 名前:nobodyさん mailto:sage [2010/01/09(土) 04:05:19 ID:???]
わあなんだか余計な改行が挟まれてる
見にくくてすいません…

880 名前:nobodyさん mailto:sage [2010/01/09(土) 11:14:41 ID:???]
>>878
function tweet$username,$password,$id)を、
function tweet($consumer_key,$consumer_secret,$access_token,$access_token_secret,$message,$to)にするか、
$toをfunction内に書けば多分エラーが出なくなるはず
urlencodeは書いておいたほうがいいかもしれないけど、とりあえずcurlは書かなくておk

でもこれだといちいち呼び出さなきゃいけないから、適当なところに$toと$reqを書いたほうが楽だし軽くなると思う

881 名前:nobodyさん mailto:sage [2010/01/09(土) 12:06:30 ID:???]
ここの人たちはわかってるんだろうけど、最近は特定ワードを拾ってきて
無差別でフォローしてない相手にもリプライするbotが目に付くようになったね。
ああいうつまんないことで反感買って印象悪くするのは避けたいもんだね。

882 名前:nobodyさん mailto:sage [2010/01/09(土) 12:08:43 ID:???]
プログラミングができなくても〜を参考にbot作ってます。
話しかけられた時、指定した単語が入ってないと「もう一回言って?」みたいな反応させたいんだけど、
こういう時はどうすればよいですか。

883 名前:nobodyさん mailto:sage [2010/01/09(土) 12:27:07 ID:???]
>>882
話しかけられた内容に指定ワードがあるかを検索したらいいだけだと思うが

884 名前:nobodyさん mailto:sage [2010/01/09(土) 12:55:12 ID:???]
>>882
phaさんが設置したbot用掲示板に書いてある
すこしはログ見るとかしてみないか?

885 名前:882 mailto:sage [2010/01/09(土) 12:59:27 ID:???]
本当だ、ちゃんと見てなかった・・・失礼しました

886 名前:nobodyさん mailto:sage [2010/01/09(土) 15:19:11 ID:???]
8bitさんのスクリプトをOAuthで動かしたくていろいろ弄ってるんだけどうまくいかない
「ライブラリを読み込む」の部分をSDNさんの「twitterOAuth.phpを読み込む」に
「Twitterからタイムラインを取得」をSDNさんの「例えば、TLを取得するのなら」に
それぞれ変更してるんだけど

Warning: array_reverse() [function.array-reverse]: The argument should be an array in /home~.php on line 33
($reply = array_reverse($reply);の行)

Warning: Invalid argument supplied for foreach() in /home~.php on line 41
(foreach($reply as $rep){ の行)

というエラーが出る。これってTLが読み込めてないってことなのかな?
もしかしたら全然見当違いなことしてるかもしれない・・・

887 名前:nobodyさん mailto:sage [2010/01/09(土) 15:55:13 ID:???]
自分宛以外のリプレイで「@nantoka こんにちわ」という文にbotが「こんにちわ」に
反応しないようにするにはどうしたらいいのでしょうか…

if( $screen_name == $username){ //POSTが自分のPOSTだった場合にサブルーチンから抜ける
return;
}
if( preg_match("/\@$username/",$text)){
//POST内容に「/」で囲まれた中で書かれた文字列(この場合$username=@botのアカウント(自分へのリプライ))を探し、あった場合に次の処理に入る。無かったら対応する括弧以降へ飛ぶ
if( preg_match("/RT/",$text)){ //POST内に「RT」があるかどうか調べる
return; //「RT」がPOST内にあったので、処理を中断してサブルーチンから抜ける
}

ここらへんを変更するのかな?と思って色々触ってるのですが、どうしてもできません…

888 名前:nobodyさん mailto:sage [2010/01/09(土) 17:27:25 ID:???]
>>880
ありがとうございます。
ttp://mini.bitter.jp/oauth_reply.txt
アドバイスを見ながら書いてみたものが上のURLの物になります($toをfunction tweet()の下に入れてみました)
が、このようにすると

XML パースエラー: 要素が見つかりません。
URL: http://〜oauth_reply.php
行番号: 1, 列番号: 1:

というエラーが出てきてしまいます。このエラーでググってみてもイマイチこの場合と結びつかないというか…。



889 名前:nobodyさん mailto:sage [2010/01/09(土) 20:41:00 ID:???]
oAuthにむりに固執しなくていいんじゃない?

890 名前:nobodyさん mailto:sage [2010/01/09(土) 21:58:48 ID:???]
6月以降はベーシック認証が「非推奨」になるんだっけ
どうしたもんかな…

891 名前:nobodyさん mailto:sage [2010/01/09(土) 22:17:16 ID:???]
きちんと検証してないけど、こんな感じで動かないかな?

<?php
$username = "1111";
$key = "3333";
$consumer_key = "4444";
$consumer_secret = "5555";
$access_token = "6666";
$access_token_secret = "7777";

$filename = "data/data.dat";
$host = "twitter.com/statuses/mentions.xml";

$fp = @fopen($filename,'rb') or die("ファイルが開けません");
flock($fp, LOCK_EX);
$line = fgets($fp, 64);
fclose($fp);

if(!empty($line)){
$last_id=$line;
}else{
$cnt = "1";
}
$XML = getObjOAuth($host,$cnt,$last_id,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret);

892 名前:nobodyさん mailto:sage [2010/01/09(土) 22:18:02 ID:???]
>>891の続き

$i = count($XML)-1;
$j = 0;

while($i >= $j) {
$var = $XML->status[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$id= $XML->status[$i]->id;
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;
$message = serif($reply_name,$name,$com);
//かえって来た値がnullじゃない場合のみ投稿する
if ($message != null){
tweetOAuth($message,$id,$key,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret);
}
$i--;
}
$string = $XML->status[0]->id;

if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}

function serif($reply_name,$name,$com){
(省略)
}

893 名前:nobodyさん mailto:sage [2010/01/09(土) 22:19:03 ID:???]
>>892の続き

//OAuth経由でTwitterに投稿する
function tweetOAuth($message,$id,$key,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
$message = mb_convert_encoding($message, "UTF-8","ASCII,JIS,UTF-8,EUC-JP,SJIS");
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterへPOSTする。パラメーターは配列に格納する
$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message,"in_reply_to_status_id"=>"$id"),"POST");
}

//OAuth経由でTwitterから取得
function getObjOAuth($host,$cnt,$last_id,$consumer_key,$consumer_secret,$consumer_secret,$access_token,$access_token_secret){
require_once("twitterOAuth.php");
// OAuthオブジェクト生成
$to = new TwitterOAuth($host,$consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterからGETする
if(($cnt != null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt,"since_id"=>$last_id),"GET");
}else if(($cnt != null)&&($last_id == null)){
$req = $to->OAuthRequest($host,array("count"=>$cnt),"GET");
}else if(($cnt == null)&&($last_id != null)){
$req = $to->OAuthRequest($host,array("since_id"=>$last_id),"GET");
}else{
$req = $to->OAuthRequest($host,array(),"GET");
}
$req_array = simplexml_load_string($req);
return $req_array;
}
?>

894 名前:nobodyさん mailto:sage [2010/01/09(土) 22:31:57 ID:???]
>>887
8bitnoteさんとこのスクリプトだと思うけどそこは関係ないよ
その下の
elseif( preg_match("/眠い/",$text)){ //上記で調べた自分へのリプライがなかった場合にこの処理に移る。POST内容に眠いが含まれていたら次の処理に移る
の前に@が含まれるpostを弾く処理を入れればいいはず

895 名前:888 mailto:sage [2010/01/10(日) 01:00:53 ID:???]
>>891-893
ソースありがとうございます!
891さんのソースをコピペして動かしてみた結果、Arrayという文字だけはPOSTしてくれるようになりました。
もうちょっとどうにかしてこようとおもいます。
ありがとうございました!

896 名前:nobodyさん mailto:sage [2010/01/10(日) 01:20:14 ID:???]
>>894
回答ありがとうございます
このPHPにはbotへの@リプライとTLから特定単語を拾ってリプライする動きを書いてます
@が含まれるpostを弾くと、このbotへのリプライに反応する事ができなくなってしまいます…
また

if( $screen_name != $username){ //POSTが自分のPOSTではなかった場合にサブルーチンから抜ける
return;
}

を打ってみたのですがやはりエラーが出ました

897 名前:nobodyさん mailto:sage [2010/01/10(日) 01:56:39 ID:???]
>>896
「botへのリプライ以外の」@を弾くだけだから大丈夫なはずだけど…
ちなみにうちではこんな感じで、反応語のチェックはswitchで書いてる

if( $screen_name == $username){ //POSTが自分のPOSTだった場合にサブルーチンから抜ける
return;
}if( preg_match("/\@$username/",$text)){ //POST内容にry
(略)
}elseif(! preg_match("/^[0-5]{0,1}$/",$now_g)){ //botが寝てる0〜5時台でなければTL反応させる
switch(true){
case preg_match("/\@/",$text) : return; //他の人への@ならサブルーチンから抜ける←これでbot宛以外のリプライには反応しない
break;
(略)
default : return;
break;
}
}
else{return;}

898 名前:nobodyさん mailto:sage [2010/01/10(日) 05:42:07 ID:???]
>>891の通りにやってみたら、PHPにアクセスすると真っ白の画面が出るようになってしまった
エラー表示されないから何が何だか・・・



899 名前:nobodyさん mailto:sage [2010/01/10(日) 05:42:42 ID:???]
>>891
$username = "1111";
$key = "3333";
が何だかわからないんだけど、ごめん参考元?ってなにになるのかな?

900 名前:nobodyさん mailto:sage [2010/01/10(日) 10:42:09 ID:???]
>>899
えっ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef