【Twitter】 BOT製作支援スレ part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/01/18(月) 23:18:42ID:wnXKZf+jhttp://pc11.2ch.net/test/read.cgi/php/1254028559/
0357nobodyさん
2010/04/13(火) 17:34:43ID:???同じサーバーに複数bot設置してるけど、どれも普通に動いてる。
なんか、@pageでそんな症状をよく聞く。
上にも書いたけど、FWC使ってる場合は延々リプしてた人がいたので
まずはcronを変えたらどうだろう?
モノクロ2階調 cron 募集 で検索かけると多分幸せになれる
0358nobodyさん
2010/04/13(火) 19:42:17ID:???FWCって"Free Web Cron Service"?
サーバーはXREAでFree Web Cron Serviceを使ってるんだが、動作不安定だったGAE-Cronよりは良くなったような…
色々機能入れてるからソース自体がだめかもわからん
ありがとう
0359nobodyさん
2010/04/14(水) 00:35:32ID:Vc66P1Z8あれのせいで技術もないような奴が設置した
どうでもいいspamまがいのbotが多すぎる
0360nobodyさん
2010/04/14(水) 00:53:51ID:???それがtwitterだろ
0361nobodyさん
2010/04/14(水) 03:50:43ID:???ほとんど関係無いと思うが
0362nobodyさん
2010/04/15(木) 12:01:56ID:HgPxMx/9一番最初のRequest tokenを取得する時点で、
Status: 401 Unauthorized
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<request>/oauth/request_token</request>
<error>Invalid / suspended application</error>
</hash>
というエラーが返ってきます。
twitter4rで試しても同じ結果になりますので bot 側ではなく、
http://twitter.com/apps の設定内容がおかしいのかな?
と思っていますが、どなたか何かヒントをいただけないでしょうか?
Consumer key, Consumer secret の内容は正しく、
http://twitter.com/apps に登録したアプリケーションの
名前の下には「有効化」と書かれています。
(Suspended されていない?)
■環境
* WindowsXP Pro SP3
* java version "1.6.0_19"
* javac 1.6.0_19
* Eclipse SDK
Version: 3.5.2
Build id: M20100211-1343
* twitter4j-core-2.1.2-SNAPSHOT.jar
0363nobodyさん
2010/04/15(木) 12:48:46ID:???それで何をどういう風に作ってそうなったかなんて知らん
0364nobodyさん
2010/04/15(木) 13:27:18ID:HgPxMx/9作ってるのはOAuthの認証だけで、
Tweetする処理などはまだです。
ソースコードはこんな感じです。
private static void tryOAuth()
{
try
{
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer("内緒", "内緒");
twitter.getOAuthRequestToken();
// ↑ここでTwitterExceptionが発生。
// 中身は401 Unauthorized。
System.out.println("Succeeded.");
}
catch(Exception e)
{
System.out.println("Exception occurred.");
}
}
自前でOAuthを書かずにTwitter4Jを使っていますが、
オフィシャルのコード例
(http://twitter4j.org/ja/code-examples.html の 7. OAuth認可)
と大差ないですし、何がよくないのかなぁと。
0365nobodyさん
2010/04/15(木) 13:54:23ID:???教えてよ
0366nobodyさん
2010/04/15(木) 14:00:18ID:???0367nobodyさん
2010/04/15(木) 14:07:50ID:???APIも目新しい情報だらけ。
0369nobodyさん
2010/04/15(木) 16:40:05ID:???http://jp.techcrunch.com/archives/20100414twitter-user-streams-annotations/
http://jp.techcrunch.com/archives/20100414live-twitter-ceo-ev-williamss-chirp-keynote/
http://jp.techcrunch.com/archives/20100414twitter-has-105779710-registered-users-adding-300k-a-day/
http://jp.techcrunch.com/archives/20100414qa-twitter-execs-answer-the-tough-questions-at-chirp/
0370nobodyさん
2010/04/16(金) 17:11:40ID:???http://photozou.jp/photo/show/291196/36256150
Twitterご利用明細書メーカー作ってみた
http://lil.la/dialy/dialy-twitter/twitterbillingmaker/
0371nobodyさん
2010/04/17(土) 03:11:42ID:???0372nobodyさん
2010/04/17(土) 16:45:01ID:???どうやるんですか、の時点であなたにはできない。
頭のいい人はもうできてる
普通の人は調べてる
あなたのような人は何もせず聞くばかり
0373nobodyさん
2010/04/17(土) 16:56:20ID:qT79J4bw今日公開されてたキャラボット(http://charactorbot.appspot.com/?&locale=ja)っていうボットジェネレーターのソースからだけど、
http://sourceforge.jp/projects/charactorbot/svn/view/tags/charactorbot_1_00_000/charactorbot/src/org/soichiro/charactorbot/server/TwitterBot.java?view=markup&revision=25&root=charactorbot
を見てみると最新のTwitter4jで実装の仕方変わったみたいだよ。
AccessToken accessToken = new AccessToken(account.getToken(),account.getSecret());
Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(account.getConsumerKey(),account.getConsumerSecret(),accessToken);
こんな感じにしてTwitterのインスタンスを取得するみたい。公式のサンプルが間違ってる。
0374nobodyさん
2010/04/17(土) 17:15:16ID:qT79J4bwURLみたら")"が混じって英語版が開いてた
キャラボット
http://charactorbot.appspot.com/?&locale=ja
こっち。
後ソースの方も
http://sourceforge.jp/projects/charactorbot/svn/view/tags.tar.gz?root=charactorbot&view=tar
で丸々落とせるので、解凍してEclipseにインポートしてGAE/Jのアプリケーションにアップロードするとそのままボットジェネレーターとして動く。カスタマイズして自分用に使うのも一つ。
0375nobodyさん
2010/04/17(土) 23:30:14ID:???ありがとうございます。
早速試してみます。
自力でちょっと調べまして、Java じゃなくて Ruby/Sinatra なんですが、以下のソースで Smart.fm はクリアできました。
require 'rubygems'
require 'sinatra'
require 'oauth'
enable :sessions
get '/twitter' do
consumer = OAuth::Consumer.new('内緒', '内緒', { :site => 'http://twitter.com', :request_token_path => '/oauth/request_token' })
request_token = consumer.get_request_token # => ここで 401 Unauthorized 発生。
session[:request_token] = request_token
puts request_token.authorize_url
end
get '/smartfm' do
consumer = OAuth::Consumer.new('内緒', '内緒', { :site => 'http://api.smart.fm', :request_token_path => '/oauth/request_token' })
request_token = consumer.get_request_token
session[:request_token] = request_token
puts request_token.authorize_url # => ここで Authoriza url が取得できた。
end
Twitter は We support hmac-sha1 signatures. We do not support the plaintext signature method. と言っており、
Smart.fm は * HMAC-SHA1 (recommended) and PLAINTEXT are supported * と言っています。
キャラボットのソースを読んでもできないようだったら、OAuth::Consumer.new の引数でそのへんを指定する方法を調べてみます。
0376375
2010/04/18(日) 01:32:47ID:???処理は正しく、Twitter の OAuth 認証に登録したアプリが無効化されていました。
新しいアプリをもう一つ登録し、そちらで試したらあっさり動きました。
無効化されたアプリを再度有効化するには [email protected] にメールするみたい。
以下、Twitter から届いていたメール。
> This is a notice that your OAuth token for あんたのアプリケーション has
> been suspended from interacting with the Twitter API.
>
> Please make sure that your application follows Twitter's policies, including
> the Twitter rules (http://help.twitter.com/forums/26257/entries/18311),
> the API rules (http://twitter.jp/apirules), and the automation rules
> (http://help.twitter.com/forums/10711/entries/76915).
>
> To request for your token to be re-enabled, please write to [email protected]
Status: 401 Unauthorized
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<request>/oauth/request_token</request>
<error>Invalid / suspended application</error>
</hash>
というレスポンス通り、suspended application だったわけで。
お恥ずかしい限りです。
0377375
2010/04/18(日) 01:41:19ID:???教えていただいたあたりのソースは GAE 上で永続化した Access token を読み出して
Twitter クラスのインスタンスを生成する処理です。
それ以前に今回つまっていた Request token の生成をCharactorbotServiceImpl.java の 529 行目あたりで行っています。
public String getAuthorizationURL(String consumerKey, String consumerSecret) {
if(consumerKey == null || consumerSecret == null) throw new IllegalArgumentException("null is not allowed.");
checkLogin();
★ Twitter twitter = new TwitterFactory().getInstance();
★ twitter.setOAuthConsumer(consumerKey.trim(), consumerSecret.trim());
try {
★ RequestToken requestToken = twitter.getOAuthRequestToken();
ConsumerKeyAndSecret key = new ConsumerKeyAndSecret();
key.consumerKey = consumerKey;
key.consumerSecret = consumerSecret;
mapRequestTaken.put(key, requestToken);
return requestToken.getAuthorizationURL();
} catch (TwitterException e) {
e.printStackTrace();
return null;
}
}
★をつけたところがポイントで、このへんの処理はオフィシャルのサンプルと同じです。
したがって、オフィシャルのサンプルは間違っていません。
長々とスレ汚しすみませんでした・・・。
0378nobodyさん
2010/04/19(月) 12:42:00ID:ex/sLZjjお前のような奴が一番ウザイ
出来もしない奴が出てくるなっての
半年ROMってろバk
0379followjp
2010/04/19(月) 12:46:29ID:NMrEK+fAhttp://followjp.com
0380nobodyさん
2010/04/19(月) 17:45:33ID:???0381nobodyさん
2010/04/26(月) 03:27:30ID:???0383nobodyさん
2010/04/26(月) 15:04:58ID:???一応クライアント名明示できるし。
0384nobodyさん
2010/04/27(火) 00:57:09ID:???使えなくなる(shutting off)とは思わなかった。
あとOAuthは突然suspendされた人が出たという噂も聞いたので尻込みしてた。
OAuth対応はライブラリ使えばそんなに難しくないけど
全部のbotのプログラム書き換えるのは面倒だなぁ。
0385nobodyさん
2010/04/27(火) 14:19:20ID:???認証作った翌朝にsuspendされた、どうしろというのだ
0386nobodyさん
2010/04/27(火) 15:06:06ID:???0387nobodyさん
2010/04/27(火) 23:18:36ID:???twitterの設定画面見たらアプリケーションの説明の所にサスペンドって出てた
0388nobodyさん
2010/04/28(水) 01:06:55ID:???アプリ説明部分が意味のない英文ってかa30文字だったのがまずかったみたい
二代目は説明箇所を一応意味のある日本語にして、短めだったアプリ名称を念のため伸ばした。
今のところsuspendされてないよ。
0390nobodyさん
2010/04/28(水) 09:41:47ID:???0391nobodyさん
2010/04/28(水) 15:35:06ID:???0392nobodyさん
2010/04/30(金) 02:00:57ID:???こちら
http://ko-lab.net/twitter/google-app-enginegae%E3%81%A7cron%E5%8B%95%E3%81%8B%E3%81%99%E3%82%84%E3%82%8A%E6%96%B9%E3%82%92%E3%82%86%E3%81%A8%E3%82%8A%E5%90%91%E3%81%91%E3%81%AB%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF/
を参考にGAEcronを設定してているのですが、12.おまけ の1アプリでいくつかのcronが動かなくて困っております。
「web.xml を開いて以下のように書き換えて適当な箇所に追加する」ソースは、
-略-
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>* 伏*</servlet-name>
<servlet-class>*伏*.* 伏*Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet- name>*伏*</servlet-name>
<url-pattern>/*伏*</url- pattern>
</servlet-mapping>
//ここ
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
// ここ の部分に挿入すればいいのでしょうか?それともまったく見当違いでしょうか?
1アプリにcron1つだと問題なく動いていますが、3つほど入れると全部 Failedで動きませんでした。
どうかご教示お願い致します。
0393nobodyさん
2010/04/30(金) 22:51:16ID:???場所はそこでいいと思うが、問題はそこじゃない
パッケージ下にクラスを作る の意味が分からないならググって理解しろ
分からないならやめとけ
0395393
2010/05/01(土) 00:43:59ID:???パッケージとクラスの意味は理解してるのか
<servlet-class>【*伏*】.* 伏*Servlet</servlet-class>
↑左の部分まで書き換えてないか?
そこはパッケージ名のままにしておかないと動かないよ
0396nobodyさん
2010/05/01(土) 05:42:06ID:???0397nobodyさん
2010/05/01(土) 16:07:12ID:???0398nobodyさん
2010/05/02(日) 00:02:12ID:???ランダムトークとリプライ反応さえあればあとは辞書データの工夫のが重要になってきそうだけど。
0399nobodyさん
2010/05/02(日) 23:40:22ID:???ありがとう
その左の部分は大丈夫だった
CronJobに、作成した数(2つ)のステータスが出るんだが、on time Failed と 数字secs late Failed になって動いてないみたいで…
見本と照らし合わせながら慎重に<servlet-name>や<url-pattern>を変えてみたけど動かないな
GAEはもともと不安定なんだろうか
0400nobodyさん
2010/05/03(月) 08:34:25ID:???0401nobodyさん
2010/05/03(月) 20:31:26ID:Gh0qmOKbたぶん、それはGAEが不安定じゃなくてTwitterの方が不安定なんだと思う。
GAEで他のサービスもやってるが、そっちは安定そのもの。
30秒のタイムアウト。
TaskQueueにスタックしてるなら10秒のタイムアウト。
twitterが遅いとそっちがURLフェッチできずに効いてくる。
タイム制限の中にURLフェッチの処理がしっかり入れば大丈夫だから、
URLにアクセスする処理をTaskQueueに分散して、
そのスレッドの中で一つしかアクセスしないようにする。
さらに一個失敗しても大丈夫なようにしておけば、意外と失敗しない。
http://sourceforge.jp/projects/charactorbot/devel/
ここのやり方が結構秀逸。
ランダムポスト・私信返信・ポスト解析・フォロー返し
といろいろやってるけど、普段は一度しかアクセスしてない。
最新のソース、ダウンロードしてみるといいかも。
0402nobodyさん
2010/05/03(月) 21:45:20ID:???0403nobodyさん
2010/05/03(月) 21:52:12ID:???CronでFailed出る時はCron自体動かなかったのかと思った。
あと、タイムアウトって8秒じゃなかったっけ
0404nobodyさん
2010/05/03(月) 23:31:20ID:???oAuthだけじゃなく色々増えるっぽいけどサーバがユーザの増加に追いついてないな。
0405nobodyさん
2010/05/04(火) 02:02:03ID:+1kjpDTicronでFailでるのは叩いてるそのリクエストが遅いから。
30秒の制限以内におわっているか、次のcronにかぶってないか、
リクエストのapi_msとcpu_api_msとかをログで見てみると良い。
数秒かかるようなら警告のマークが出てるはず。
cronで直接叩かずに、cronは開始時間だけ取っておいて、
すぐTaskQueueに詰めてすぐ終了すると、失敗少ない。
あと、失敗時のリトライもTaskQueueに詰めれば確実。
あと数秒かかってるようならappstatsを入れて
どのメソッドとどのAPIコールにどれだけ時間がかかってるか確認すると良い。
やり方は、GAE/Jならの4番目。
http://d.hatena.ne.jp/itaosan/20100421
とは言えリトライしててもTwitterが落ちまくってるとすごく時間かかるけど。
0406nobodyさん
2010/05/04(火) 02:56:11ID:???GAEからhttp叩いて着火するいわゆるweb cronの話が混ざってるようにも見える
0407nobodyさん
2010/05/04(火) 02:59:53ID:???後者はGAE行きのレスポンスをさっさと吐いて標準出力をクローズすれば
twitterが重かろうと関係なくGAE側は正常終了するはず
0408nobodyさん
2010/05/04(火) 09:35:22ID:QLS4fdDM0410nobodyさん
2010/05/04(火) 17:10:28ID:???意外に楽だった
どれだけのボットがいなくなるかには興味がある
0411nobodyさん
2010/05/04(火) 17:41:57ID:???サンデープログラマにとっては初めてぶち当たる大きな壁になるだろうなこれ
0412nobodyさん
2010/05/05(水) 01:51:31ID:???対応した後のbotサービス使うだろうよ。
俺もまだやってないけど作ったばっかのbotの機能の方を先になんとかしたいところ。
0413nobodyさん
2010/05/05(水) 10:40:35ID:???http://pha22.net/twitterbot/からいただいたver.2.03のreply_pattern.phpの編集なんですが
TLに反応して@を返すというものなんですが・・・
http://d.hatena.ne.jp/bardothodol/20090930#p1のサイトのものをお借りしてコピペしたのですが反応してくれません
他の動作は確認できました
修正方法や雛形を教えてください><
0414nobodyさん
2010/05/05(水) 12:17:05ID:???0415nobodyさん
2010/05/05(水) 12:30:43ID:???↓
$filename = "./log.dat";
に変更しただけですが駄目ですか?><
0416nobodyさん
2010/05/05(水) 13:08:28ID:???変更箇所が$filenameだけなら
$username = "";
$password = "";
変えてなきゃ動くわけもないので初心者が言うとき何をしたかはしょらずに正確に書いて欲しい。
まあファイルの文字コード違うとかそういうのじゃないの。
0417nobodyさん
2010/05/05(水) 13:09:11ID:???変更箇所をすべて言わないとわかんないってことで。
0418nobodyさん
2010/05/05(水) 13:20:53ID:???はいそうです
$filename = "./tmp/last.dat";
ここ以外は弄ってません
文字コードと改行は指定されたとおりにしました
COBOLしかできない痴呆なので詳しくお願いします><
0419nobodyさん
2010/05/05(水) 14:05:11ID:???$username = "";
$password = "";
を指定してないからじゃないかそれ。
プログラムやってんならその行見て不審に思わなかったのか。
0420nobodyさん
2010/05/05(水) 14:30:55ID:???自分でも質問するに値しないレベルのどうでもいいことだと認識してるからじゃないのか?
0421nobodyさん
2010/05/05(水) 17:18:34ID:???キャラボットの復活待ちます
0422nobodyさん
2010/05/05(水) 17:35:09ID:HTuheCnu0423nobodyさん
2010/05/05(水) 20:49:50ID:???0425nobodyさん
2010/05/06(木) 11:30:08ID:/xpEwzH6昨日取ったaccess tokenで、post出来た。いいんだけど、expire期限いつまでなんだろ。
0426nobodyさん
2010/05/06(木) 14:09:00ID:???0427nobodyさん
2010/05/06(木) 17:20:27ID:/xpEwzH6>>426
> tokenは無効化するまでじゃね?
さんくす。安心して使いまくります。
0428nobodyさん
2010/05/07(金) 23:12:32ID:???http://twitter.com/nbginews
0429nobodyさん
2010/05/09(日) 15:15:24ID:QohMfTcWキャラボットまた募集はじめたみたいだよ。
http://sourceforge.jp/projects/charactorbot/wiki/Servers
ここで運用サーバー一覧が公開されてる。
OAuth認証もできるし、TLへの反応も1分置きで結構使える。
けど、作成可能なボット数も限りあるみたいだから急いだ方がいいかも。
0430nobodyさん
2010/05/09(日) 18:51:26ID:4tzIYBNeうまく行くときといかないときがあるから逆に原因不明という・・・。
何か気をつけることってありますか?
いまはmentionsでreplyを取得しています。つぶやきは今のところ問題なさそうです(あまりつぶやいていないので分かりませんが
0431nobodyさん
2010/05/09(日) 19:56:56ID:6lB/rbOi時刻ずれてない?
0432nobodyさん
2010/05/12(水) 05:49:39ID:???リプライだけひたっすら重たくて1300〜1500cpu_msでログが真っ赤。ポストもされない。
間隔あけてみたりソースのコメントアウトとかecho文も全部消したりしたけど一向に良くならない…
どう対処したらいいんだろう。
ソースはPHPでジェネレーターとかは使ってない。GAEはjava
0434nobodyさん
2010/05/12(水) 10:49:56ID:???「cgi 標準出力 閉じる」あたりでぐぐれ
0435nobodyさん
2010/05/12(水) 16:55:07ID:???タイムアウトしまくりなんだか他もそんな感じ?
0436nobodyさん
2010/05/12(水) 23:12:33ID:1x2EnOp+それはかかりすぎ。
一気に一つのサーブレットたたいてやるんじゃなくて
分けれるなら分割して複数のサーブレットを
複数のcronからたたいたらどう?
フォロワーが1000超えてるならタイムライン
の解析とかも1分置きより短くして一回の処理を短くした方がいいよ。
API回数は食うけど。
0437nobodyさん
2010/05/13(木) 00:09:55ID:???0438nobodyさん
2010/05/13(木) 03:07:16ID:g6nE4IPR「アプリケーションのウェブサイトURL」や「コールバックURL」がまだ確定してません。
まず練習用に作りたいので、公開するかも分かりません。
http://localhost/
などと入力したらinvalidと出ました
適当なURL(http://sample.comなど)を入力しちゃっていいのでしょうか?
0439nobodyさん
2010/05/13(木) 17:46:30ID:???> OAuth対応させた後にGAEにも以降したんだが、
> リプライだけひたっすら重たくて1300〜1500cpu_msでログが真っ赤。ポストもされない。
> 間隔あけてみたりソースのコメントアウトとかecho文も全部消したりしたけど一向に良くならない…
> どう対処したらいいんだろう。
> ソースはPHPでジェネレーターとかは使ってない。GAEはjava
ウチもログ真っ赤、でもリプライは返してるんだよね…わけわからん
0440nobodyさん
2010/05/14(金) 01:39:01ID:???デプロイで
Server Error (500)
A server error has occurred.
というエラーが出てしまって、デプロイすることができません。
調べても詳しく説明が載っていなくて困っています。ご存知の方いらっしゃいましたらお願いします。
0441nobodyさん
2010/05/14(金) 07:47:45ID:???それだけで誰か分かりますか?といってもエスパーでもない限り分からないよ
bot掲示板でただ分かりません!ご教授下さい><とだけ言ってるやつらと一緒だな
0443nobodyさん
2010/05/14(金) 12:16:01ID:???普段の投稿は「"東京"から」のように自分の設定したfromを表示させることができますが、
例えば手動でウェブや他のクライアントから投稿した場合にも、同じように表示させることは可能でしょうか?
0445nobodyさん
2010/05/14(金) 14:10:34ID:???PHPだと標準出力は手動で閉じれないみたいなんだよな
アクセスしてきたらレスポンスだけ先に送るってことできないのかな
0447440
2010/05/14(金) 22:35:23ID:???もう少し一人で格闘してみます。すみません。
0448nobodyさん
2010/05/15(土) 01:13:36ID:???とりあえずphpのスレでも見てテンプレの初心者向けサイトでも参考にするといい。
0449nobodyさん
2010/05/15(土) 02:46:02ID:???0450nobodyさん
2010/05/15(土) 02:46:43ID:???0452nobodyさん
2010/05/16(日) 06:34:31ID:???同様のスクリプトを探してみてもBasic認証での実装しか見つかりません
参考にしたいのですが、oauthをJavascriptで実装しているものははないでしょうか
0453nobodyさん
2010/05/16(日) 23:07:45ID:ctAHkOPvhttp://blog.tomatomax.net/archives/2696
0454nobodyさん
2010/05/18(火) 15:13:38ID:BXwl2DAR叩く時間が2秒ずつ遅れていってしまって困っています
安定させる方法や、例えば30分ジャストにだけ叩くのではなく29分と31分も含むなどして
許容時間を広げる方法ってありませんか?
■ このスレッドは過去ログ倉庫に格納されています