【代理質問】TwitterでBOTを作っているのですが、こいつに天気予報をさせたいと思います。何時間かに1回のランダムポストと「今日の/明日の/明後日の○○の天気は?」ときかれた時のリプライ。両方実装したいと思います。最初は2,3箇所でもいいのですが最終的に全国の天気をしゃべらせたいと思っています。

ベースはhttp://pha22.net/twitterbot/このサイトさんのVer.2.04を使っております。
自分でもいろいろ調べたのですが、行き詰ってしまいました。
そこで、丸投げで大変申し訳ないのですが、どなたかソースコードを作っていただき、その配置の仕方を教えてくださるとありがたいです。
ちなみに天気予報を取得するのは
http://weather.livedoor.com/weather_hacks/webservice.htmlにしようと思っています。
教えてばかりで申し訳ありません。どうぞよろしくお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/09/29 10:41:13
  • 終了:2010/10/04 08:34:28

回答(3件)

id:kabiy No.1

Shota Fukumori回答回数20ベストアンサー獲得回数02010/09/29 15:33:53

ポイント40pt

・正規表現でリプライのマッチングをしてキーワードの抽出

・キーワードから天気予報を取得

・XMLをパースして情報を取り出す

わけて考えればすぐじゃないですか。

他人にコード書かせて無料で使わせてもらうならやらなくてもいいんじゃないでしょうか。

こういうのを使えばいいのではないでしょうか。すでにあるんですし…

http://twitter.com/otenki_bot

id:Helty-baddy

…そうですね

私は離れた場所にいるので手取り足取り教えることができないのです

初心者には用語からして難しいらしいです 「パースって何?」ってきかれました…

いろいろぐぐったり、そのサイトも見たらしいんですけど、途中で行き詰っちゃったと申しておりました

ですので人力で質問させていただいたのです やらなくてもいい、のではなく自分の作ったBOTで本人がやりたいと申しておりますので

しかもBOT自体は完成しているので… 失礼ながら、やめれば、というご意見ではなくこうしたらどうか、というご意見をいただきたいです

無料ではなくはてなPをお礼として差し上げますしおすし…



ともあれ、厳しいご指摘ありがとうございます

2010/09/29 17:45:13
id:ko8820 No.2

ko8820回答回数1221ベストアンサー獲得回数692010/09/29 21:32:13

ポイント40pt

http://pro10.sakura.ne.jp/tree/index.php?mode=root

こっちに質問を投げてみては?

その場合でも、小さく細切れで質問しないとつかないと思う。

人力検索はてなでも、もう少し範囲を小さくして機能ごとに質問すれば

回答がつくかも。

それか、500Pとか1000Pとかいう高ポイントを約束する。


>私の想像では、その場その場で取得するものを想像してました

>そうでなければ多数の地域にはとてもじゃありませんが対応できませんし、

私は、ローカルに一度に取得しておいて2度目からはこれを使う方式のほうが

高負荷にも耐えれると思うのでよいと思いますが、

初心者に渡すソースなら、その都度APIで取得して、それを使うほうが

シンプルなので理解しやすそうに思います。

id:Helty-baddy

ご回答ありがとうございます。

要は「BOTにライブドアのWeatherHacksから取得した天気予報のリプライ機能をつけたい」ということだけだったのですが、何やら難しいことになってしまいました

質問文が悪すぎです

はてなを6年近く利用させていただいているのですが、ネタ質問しかしてこなかったツケがここであらわれようとは…><

私自身の頭の程度を呪いたくなります

今、すっごい恥ずかしいです…


もちろん、どんぴしゃなご回答にはそれなりの対価をお支払いするつもりですが、それ以前に私の頭がですね…ああ、お恥ずかしい

私なんぞが真面目な質問をすること自体が間違いでした…

あーあーあー、消えてなくなりたい


重ねて、ご回答ありがとうございました

2010/09/30 01:26:08
id:kabiy No.3

Shota Fukumori回答回数20ベストアンサー獲得回数02010/09/30 15:37:00

返答ありがとうございます

はてなポイントでできることって限られてますよね。それでもこのポイント数は少なすぎると思います。#2と同じ意見です。

あとはEasyBotterだと多少ベースに改良を加えないとできない気がします...

まあコメント欄をみて動かないということなんですが、phpの設定でエラーの出力が止められているのでは?

ググってスクリプト内部で設定変更する関数の実行を追加してやれば出力されるはずです。

あといまさらですがPHP昔触ったくらいでいまはRubyしか書けないことをご承知してください。はい。

URLはダミーです:

http://www.google.com/

id:Helty-baddy

いえいえ。こちらこそ。

ん?このポイント数?というのは回答ポイントのことでしょうか?

これは最初にはてなさんに支払うポイントと回答をオープンするたびに必要なポイントが表示されているだけで、回答者様にお支払いするポイントとは別のものですよ?

最初に質問するためにはてなポイントが必要で、ご回答をひとつオープンするごとに10ポイントが必要なシステムなのです。

ここから更にご回答者様にお支払いするポイントが必要、とそういうしくみです。

>ベースに改良を加えないとできない気がします…

そうですね、私もそう思います。

人に聞く前にもっとPHPの勉強をするべきではないかと。<友人

私はプログラミングとかそういう仕事とは全く無関係の仕事をしていますし。

追加のご回答ありがとうございました。

2010/10/01 19:25:06
  • id:windofjuly
    うぃんど 2010/09/29 18:51:28
    Helty-baddy さんのスキルがどの程度かわかりませんけど、
    Helty-baddy さんが手取り足取りで教える事が出来ない状況で、
    さらに見知らぬ人に尋ねても混乱がますだけではないでしょうか
     
    既に完成しているとのことですけれど、それはVer.2.04のことですよね
    Ver2.04を設置して動かしてみるところまでは成功なさったのでしょうか
    それすらもまだだとすれば、
    まずはHelty-baddy さんが実際にVer2.04を動かすところまでを
    指導してあげることが第一歩だと思います
     
    そのままの形で設置することが出来るようであれば、
    まずはEasyBotter.phpにパターン認識して返事を返すように改造します
    つぎに天気を取得するように改造を加えます
    それぞれを分けてしまえば改造はさほど難しいものではないでしょう
     
    いまだ、そのままの形での設置も指導できていないのだとすれば、
    Ver2.04 を改造(正直申し上げてベース以外残らないような改造になります)しても、
    結局無駄ということになりそうな気がします
    (失礼ながらHelty-baddyさんの指導スキル不足ということになりそうです)
     
    代理ではなく、あなたが請け負った仕事を丸投げしているようにしか思えないのは、
    私の思い過ごしだと思いますが、ご本人の事を考えると、ネット環境はお持ちのようなので、
    ご本人にもはてなに登録していただいて、自身のスキルと言葉で直接相談するように、
    進めてあげるほうがよいような気がします
    (ポイント取得の手続きが面倒なようであれば、登録後に、
    あなたからポイント送信してあげるという手もありますよ)
  • id:Helty-baddy
    windofjuly さま


    コメントありがとうございます。
    BOT自体はもうTwitter上で数ヶ月以上正常に稼動しているようです。

    一応私が書いたプログラムを送ったのですが、それでは上手くいかなかったようです。



    <?php
    //今日のxmlを呼び出す
    $xml_today = simplexml_load_file("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today");//番号を変えれば別の都市になる
    $today_weather = $xml_today->telop;
    $today_max = $xml_today->temperature->max->celsius;

    //明日のxmlを呼び出す
    $xml_tomorrow = simplexml_load_file("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=tomorrow");
    $tomorrow_weather = $xml_tomorrow->telop;
    $tomorrow_max = $xml_tomorrow->temperature->max->celsius;
    $tomorrow_min = $xml_tomorrow->temperature->min->celsius;

    //今日のファイル:内容(時間帯によって気温が取得できない為)
    if($today_max == ""){
    $todays = "今日の東京は、".$today_weather."だな…";
    }else{
    $todays = "今日の東京は、".$today_weather."、最高気温は".$today_max."度だぞ…";
    }
    //今日のファイル:書き換え
    $fp = fopen("yoho_today.txt", "w");//ファイル名を変える
    fwrite($fp, "$todays");
    fclose($fp);

    //明日のファイル:内容(時間帯によって気温が取得できない為)
    if($tomorrow_max == "" || $tomorrow_min == ""){
    $tomorrows = "明日の東京は、".$tomorrow_weather."だぜ";
    }else{
    $tomorrows = "明日の東京は、".$tomorrow_weather."、最高気温は".$tomorrow_max."度、最低気温は".$tomorrow_min."度だぞ";
    }
    //明日のファイル:書き換え
    $fp = fopen("yoho_tomorrow.txt", "w");//ファイル名を変える
    fwrite($fp, "$tomorrows");
    fclose($fp);
    ?>



    このような形でしたが。
    私は専門ではないのでよく分かりませんが、指導力不足だというのは確かにそうだと思います。
    友人は海外に住んでいるのでいろいろとややこしいのですが、仰るとおりこの質問を私がしたこと自体間違いだったかもしれませんね。
    貴重なアドバイスありがとうございます。
    ちなみに、これは仕事ではなく単なる友人の趣味です。
    もう暫く様子を見て、無理そうならこの質問をキャンセル、もしくは締め切りにしてアドバイスを下さった方に手動でポイントを贈らせていただきたいと思います。
    貴重なご意見ありがとうございました。
  • id:windofjuly
    うぃんど 2010/09/29 20:29:39
    データをテキストファイルとしてあらかじめ準備しておくという方式だったのですね
    (私の想像では、その場その場で取得するものを想像してました
    そうでなければ多数の地域にはとてもじゃありませんが対応できませんし、
    位置情報を取得して自動的に周辺地域の天気を表示するなどへの拡張などもできないでしょう)
     
    さて、コピペして動かしてみましたが、まずファイル書き込み権が無いと言われてしまいました
    (手抜きすぎました。笑)
    つぎには、出てきた結果が文字化けしてました
    (こちらも、私の手抜きです。キャラクタセット関連は無視しました)
    冗談みたいな間違いはさておいて、日本国内においては少なくとも情報の取得はできるようです
     
    ご友人は海外とのことですが
    【1】livedoorの天気情報の取得が出来ているか確認してますか?
    ブラウザから http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today へ直接アクセスしてもらって結果を見ればわかりますよね
    【2】どのようなエラーが返ってきているか確認してもらってますか?
    phpがどのようなエラーを返してきているかがわかれば解決は早いですよね
    通常であればエラーは隠されていますので、サーバのログを見る権限が無い場合は
    php.iniの設定を書き換えたり、下記で一時的に設定を置き換えたりしてもらうと良いでしょう
    http://jp.php.net/manual/ja/function.error-reporting.php
    【余】海外に送るならば
    ソースコードから日本語はすべて削っておいたほうが良いかもしれないです
    (UTF-8形式での保存であれば問題はないはずですが、念のためです)
  • id:Helty-baddy
    windofjuly さま


    度々のコメント、大変感謝いたしております。
    位置情報を取得して自動的に…などという高度な技は全く考えておりませんでした。
    なにしろその友人が作っているのはネタBOTですので…(これを申し上げるのが恥ずかしかったというのもありますw)


    とりあえず、日本からPCを持っていった上、ファイルのやり取りはスカイプでしているので今のところ情報取得と文字化けの心配はないようです。
    そしてwindofjuly さまが動かしてくださったということは(貴重なお時間をさいていただいてありがとうございます)一応このソースでも動く、ということですね。
    となると、セッティングの仕方が分からないのではないかと…<友人


    …私がアホなら友人もアホ、とそういう結論が出てしまいました…うぐぐ…お恥ずかしい…


    エラーについては聞いておりませんので(というか真っ白!真っ白!位しか言いません><)
    windofjuly さまのご提示してくださった方法で試してみろ!と申し上げておきます。
    本当に何から何までありがとうございます。
  • id:Helty-baddy
    皆様、ありがとうございました。
    私の質問の仕方が悪かったせいで混乱を招いてしまい大変申し訳ありませんでした。



    yoho_today.txtとyoho_tomorrow.txtという空きファイルをサーバにアップロード。
    パーミッションは666・606など、書き込み権限を与えておく。
    同じディレクトリにweather.phpというファイルを作り、サーバにアップロード。
    weather.phpにアクセスして、yoho_today.txtとyoho_tomorrow.txtが書きかえられているか確認。
    ツイートさせる時間より少し前にweather.phpをCRONで実行する。
    if使うかswitch使うかして、yoho_today.txt・yoho_tomorrow.txtの内容をツイートさせる。


    こんな感じにしたかったのですが。



    コメント欄でアドバイスを下さったwindofjuly さまには手動でお礼のポイントを送らせていただきました。
    何かちょっと解決策が見えてきたような気がするのですが、またもう少し分かりやすい質問文で質問させていただくことがあるかもしれません。
    (weather.phpを実行しても .txtに書き込まれていないのが原因のようです)
    そのときはどうぞよろしくお願い致します。
  • id:windofjuly
    うぃんど 2010/10/04 09:37:49
    ポイント届きました。ありがとうございます
     
    >パーミッションは666・606など、書き込み権限を与えておく
     
    ファイルだけでなく、ディレクトリのパーミッションの確認もお忘れなく
     
    >weather.phpを実行しても .txtに書き込まれていない
     
    エラーコードの取得などが難しいようであれば、コードをさらにシンプルにして実行してもらうしかないと思います
    まずは下記のような具合。これで問題なければファイルを書き出すようにして、さらにはCRONで、、、
    (全角文字を削ってあるのは、WEBサーバのキャラクタコードの取り扱いがわからないためです)
    <?php
    $xml_today = simplexml_load_file("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today");
    $today_weather = $xml_today->telop;
    $today_max = $xml_today->temperature->max->celsius;

    if($today_max == ""){
    $todays = "tokyo " . $today_weather;
    }else{
    $todays = "tokyo " . $today_weather . ", " . $today_max;
    }

    echo $todays;
     
    どこまでご友人にお付き合いするかは Helty-baddy さんの時間的余裕にもよると思いますので、ひとまずこの辺で
     
    ご質問とは関係ない話ですがポイント0にしてしまうと受け取り率が下がってしまうような仕様になってますので、
    次回からは、ご面倒でも20ポイントずつといったように割り当てるようにしてあげてください
    (役に立たなかったから、こちらの回答はゼロという場合は、もちろんゼロですけどね)
  • id:Helty-baddy
    windofjuly さま


    お忙しい中わざわざありがとうございます。
    キャラクターコードはUTF-8のようです。
    私も自分の仕事が忙しくなってきている上に、今ちょっと肺炎を患っているので、
    友人のスカイプに付きっ切りでアドバイス、というのは難しいです。
    時間帯も違いますし。


    そして、いろいろ試行錯誤した結果、1度は予報を通常のツイートで投稿する事に成功したようです。
    しかしその後Easybotter.phpにエラーがでてしまい、結局全部やめてはじめからやり直し始めたようです。
    windofjuly さまのお書きになってくださったものを参考にもう一度やってみなさいとだけアドバイスしたいと思います。



    ちなみに、ポイントの割り振りは、最後のご回答についてはご挨拶をしてくださったもの、と捉えてあえて0にいたしました。
    ポイントの割り振り、難しいですよね、ネタ質は特にそう思います。今まで何度悩んだことか・・・。
    ともあれ、皆様ご親切にお付き合いいただき、本当にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません