このところプログラミングしたい病が発生していて、ひっそりとPythonでニコ生アラートを作っていました。
それがどうにか形になってきたので、忘備録がてら残しておきます。
ニコ生アラートの概要
大雑把な流れは
- 放送通知サーバのステータス確認と接続情報の取得
- 接続情報を使ってsocket接続
- 受信データをアラート対象と突き合わせる
こんな感じになります。
今回は1.放送通知サーバのステータス確認と接続情報の取得を行います。
放送通知サーバの情報取得
放送通知サーバの情報はhttp://live.nicovideo.jp/api/getalertinfoから取得できます(cookie不要)。
URLにアクセスすると以下のようなXMLデータが返ってきます。
<!-- 稼働中 --> <getalertstatus status="ok" time="1425964007"> <user_id>Anonymous</user_id> <user_hash>◯◯◯◯◯◯◯◯◯</user_hash> <ms> <addr>twr01.live.nicovideo.jp</addr> <port>2528</port> <thread>1000000006</thread> </ms> </getalertstatus> <!-- 停止中は status="fail" -->
放送通知サーバへの接続に必要な情報は
- addr
- port
- thread
です。
ということで、必要な情報を取得するPythonスクリプトはこんな感じになりました。
# -*- coding: utf-8 -*- import xml.etree.ElementTree as Xml import urllib2 """URLからXMLデータを取得する。 XMLは解析しやすいようにElement型に変換""" url = 'http://live.nicovideo.jp/api/getalertinfo' response = urllib2.urlopen(url) xml_string = response.read() xml = Xml.fromstring(xml_string) '''放送通知サーバのステータス確認と接続情報の取得''' status = xml.get('status') # 稼働中 if status == 'ok': address = xml.findtext('ms/addr') port = xml.findtext('ms/port') thread = xml.findtext('ms/thread')
次は、ココで得られた接続情報をもとにsocket接続してデータの受信を行います。

コメント