てるてるブログ

てるてるぼうずの日常やらお勉強やら

BOT作成メモ -お天気API-

Posted on | 3月 5, 2012 | No Comments

BOTへの組み込みを考えてお天気APIを探索中。

割と良く使われてるのがlivedoor天気情報のWeather Hacks
このAPIを使ったお天気機能のBOTへの組み込みはGoogle先生に聞いてみると結構出てきます。

やりたいことは、

  1. 日本の各都市のお天気をランダムでつぶやく
  2. 「今日の”地名”の天気」というリプライに天気予報をリプライする

の2点。

1番目はランダムでなく予報したい土地を決めて呟く分には割とすぐにできる感じ。
ランダムでつぶやこうとすると配列やらなんやらでてきて、さらに「今日の天気は?」と聞かれて返事をするパターンにするとさらに大変。
すでに偉い人たちの作って下さった確実なソースもあるんですけどね。
cronをケチって全部easybotterに組み込もうとした辺りでつまづいてしまい、結局そのまま使わせてもらうことで妥協。

そんなこんなも含めとりあえず作業メモ。

1でも2でもxmlを上手いこと読み込んでくれるPHP5の関数、simplexml_load_fileが大活躍してくれました。
simplexml_load_file関数で読み込んで配列で処理。
配列ってなに?ってところからの出発だったんで大変でしたけどね。

まずは1番目、天気予報をつぶやく。

掲示板のこちらあたりからソースを拝借。
使用するAPIはお天気APIでは有名どころのlivedoor 天気情報のWeather Hacks。

お天気botの作り方を

<?php
$w_city = array(//都市番号→都市名の変換
	4=>"札幌",
	25=>"仙台",
	63=>"東京",
	46=>"金沢",
	38=>"名古屋",
	81=>"大阪",
	90=>"広島",
	104=>"松山",
	110=>"福岡",
	136=>"那覇",
);
$key1 = array_rand($w_city);
$cityName = $w_city[$key1];

$day = "today";

$tenki_url = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=".$key1."&day=".$day;
$ten_xml = simplexml_load_file($tenki_url);
$tenki = $ten_xml -> telop;

require_once("EasyBotter.php");
$eb = new EasyBotter();

$data = "今日の{$cityName}の天気は{$tenki}だよ";
$response = $eb->setUpdate(array("status"=>$data));
$result = $eb->showResult($response);
?>

上記ソースをtenki.phpとでも名前を付けてサーバにアップしてURLを直で叩くかcronで叩くかすれば10カ所の都市からランダムで今日の天気をつぶやきます。
都市を決め打ちしたい場合は$tenki_urlのアドレスの$key1の部分を指定したい都市の都市番号に変えればOK。
これだけならEasyBotter無しでcronの設定だけでも行けそうな気がするんだけど、なんとかEasyBotter内に取り込みたい…ってことでtenki.phpを書き換えて…

<?php
$w_city = array(//都市番号→都市名の変換
	4=>"札幌",
	25=>"仙台",
	63=>"東京",
	46=>"金沢",
	38=>"名古屋",
	81=>"大阪",
	90=>"広島",
	104=>"松山",
	110=>"福岡",
	136=>"那覇",
);
$key1 = array_rand($w_city);
$cityName = $w_city[$key1];

$day = "today";

$tenki_url = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=".$key1."&day=".$day;
$ten_xml = simplexml_load_file($tenki_url);
$tenki = $ten_xml -> telop;

$data = array("{$cityName}の天気は{$tenki}なのだ");
?>

それからbot.phpの
$response = $eb->postRotation("data.txt");
の部分を
$response = $eb->postRotation("tenki.php");
に書き換える(postRotationでもpostRandomでも大丈夫なはず)。

もっとスマートな方法あると思うけどね…

次に「今日の”地名”の天気」というリプライに天気予報をリプライする方法。
これは既にソースを公開しているサイトさんがありました。

こちらもどうにかEasyBotterに組み込めないかとやってみたものの…断念!
別にCron使って呼び出してます。

トラックバックURL:

Comments

Leave a Reply





*

About

てるぼうず

てるてるぼうずな日常やらお勉強やら

旧ブログ倉庫 »
旧ブログの記事をお探しの方はこちらから

Admin