lql.be::hateda

2011-03-03

10分前に放送アニメを通知する

サーバを入れ直して、なにがツラいって plagger の環境作り直すことですね。なんか毎回のようにハマるし悲しい限りです。今 plagger でやらせてることってのが、朝に今日の天気予報を push させるというのと、10分前に放送アニメを通知すること。天気予報はどうにでもなりそうだったので、アニメ通知のほうをなんとかできれば、いちいち plagger 入れる必要ないんじゃないかなーということで、python で書いてみた。

cron で10分間隔で回す。しょぼかるから番組情報を拾ってくる。〜10分後に放送する番組があったら im.kayac に push するという感じ。feedparser は標準じゃないので、apt-get install しよう!!!

#!/usr/bin/env python
# coding: utf-8

import feedparser
import datetime
import urllib2, urllib
import hashlib

url = 'http://cal.syoboi.jp/rss2.php?usr=yutamoty&titlefmt=$(Mark)%20$(StTime)%20[$(ChName)]%20$(Title)%20$(SubTitleB)'

class IMKayac:
    def __init__(self, id, password=None, sig=None):
        self.id = id
        self.password = password
        self.sig = sig

    def notify(self, msg):
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
            path = 'http://im.kayac.com/api/post/%s' % self.id
            params = { 'message':msg, }

            if self.password:
                params['password'] = self.password

            if self.sig:
                params['sig'] = hashlib.sha1(msg+self.sig).hexdigest()

            urllib2.build_opener().open(path, urllib.urlencode(params))

d = datetime.datetime.today()
d10 = d + datetime.timedelta(minutes=11)

item = feedparser.parse(url)

for entry in item['entries']:
    title = entry['title']
    time = entry['updated']
    t = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+09:00')

    if d <= t:
        if d10 >= t:
            if __name__ == '__main__':
                im = IMKayac('username','password','1')
                im.notify(title)

しょぼかるRSSについてはヘルプを参照。ユーザ作って表示させる放送局をしぼらないと push されすぎてつらいと思う。

rss2.php - しょぼいカレンダーのヘルプ

これで、リアルタイムで見たいアニメがあった場合でも大丈夫。今期だと IS と まどかマギカ はリアルタイムで見るようにしてます。毎度、しょぼかるにはお世話になっております。

2011-02-26

WM3500R のバッテリー残量を Growl で通知する

WM3500R をうっかり契約して家の固定回線解約しました。将来的には、softbank の2年縛りが切れたらそれも解約して docomowimax の2回線で生きていこうと思ってます。それで、実際使っててバッテリー残量が分かりにくいし、いちいち管理ページに見に行くのもめんどいので Growl で通知できるようにした。

勉強中の pythonスクリプト書いてみた。これを cron 登録して適当な感覚で回すことでだいたいの残量を把握するようにしました。

ちなみに、実際の WM3500R の使い勝手ですが、すごい満足してる!!! 前、契約してたときは我が家すらギリギリ電波入るけど速度でないとかいう状況だったけど、今は、余裕の電波状況で速度も満足なレベル。エリアに関しては地下は勿論全滅だけど、地上ではそれなりに使えるようになった感じ。少なくとも通勤の山手線とかに関してはまったく問題なく使えて、むしろ softbank のほうが電波入らないことがある。バッテリーに関しては、本当に8時間稼動とか可能なレベルなのでバッテリー切れとか気にする必要が殆どない。

ということでお金ない感じの人は家回線とスマートフォン回線を wimax に集約すれば、生きていける〜。

家ではかったスピードテスト

f:id:yutamoty:20110226164515p:image


#!/usr/bin/env python
# coding: utf-8

import urllib2
import scrapemark
import Growl

username = 'ユーザ名'
password = '設定したパスワード入れる'

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, 'http://web.setup/index.cgi/eco_mode_main',
        username, password)

handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
html = urllib2.urlopen('http://web.setup/index.cgi/eco_mode_main').read()

html_utf8 = html.decode("euc-jp").encode("utf8")

batter = scrapemark.scrape("""
<body>
{*
<td class='small_item_td2'> {{ batter }} </td>
</tr>
*}
</body>

    """,
    html_utf8)

g = Growl.GrowlNotifier(
        applicationName = 'GrowlPython',
        notifications = [ 'Demo' ],
        defaultNotifications = [ 0 ],
        hostname = 'localhost',
        password = '',
        )
g.register()
g.notify(
        noteType = 'Demo',
        title = u'WM3500R バッテリー残量',
        description = batter["batter"],
        sticky = False
        )

ちなみに、Python から Growl に通知するやり方はこちらを参考にしました。

PythonからGrowlを利用する | おいぬま日報

追記

WM3500R に繋いでないときの処理の存在忘れてたし、あとで書こう。

2011-01-17

誕生日近いのでスクリプト書いた

誕生日が近いのでサーバーに祝って貰えるようにスクリプトを書きました。

#!/usr/bin/env bash

start()
{
        echo "when is your birthday?"
        echo "month?"
        read month
        echo "day?"
        read day
        echo "year?"
        read year
        month=`echo $month | sed -e 's/^\([0-9]\)$/0\1/g'`
        echo "$year,$month$day" > ~/.birthday.txt
}

if [ -f ~/.birthday.txt ];
then
        true
else
        start
fi

BIRTHDAY=`cut -d "," -f 2 ~/.birthday.txt`
BIRTHYEAR=`cut -d "," -f 1 ~/.birthday.txt`
TODAY=`date +%m%d`
YEAR=`date +%Y`
AGE=`expr $YEAR - $BIRTHYEAR`

if [ $BIRTHDAY = $TODAY ];
then
        echo -e "Happy Birthday to You
     Happy Birthday to You
         Happy Birthday Dear "$USER"
               Happy Birthday to You
  Λ_Λ
 ∂/ハ)ヽヽ  ∧ ∧       ∧_∧  ∧ ∧
  ハ`∀´ノ  ( ゚Д゚)       (゚ο゚*)  ( ´ー`)
  /つ * ヽ ⊂~~~~つ  ♪  ⊂~~~⊂  \∽          /|
 /___ゝ  /  | (-_-)  /  ヽ    \.\_∩____//
  (__)_) 〈//  /  (∩∩) 〃〃〃ゝ    \     / ./ 〉
          ~~~~       ~~~~~~     ∪ ̄ ̄∪∪

  Λ_Λ  ♪〜♪♪
 ( ・∀・)     ♪    ∧_∧      / ̄ ̄ ̄ ̄ ̄
 ( つ「 ̄ ̄]       (__´∀`) ∇  < "$AGE" 才になったよ♪
 ( 「 ̄   |       (  <y> ]つ    \____
 . |__iiiiiiiiiiiii        |__|_|
               (__)_)
             ~~~~~~~~~~~~~~~"
fi

このスクリプトサーバの bashrc とか zshrc あたりでログイン時に立ち上るようにしておけば誕生日の緊急対応時に心がほっこりあたたかくなると思います。思いたい!!!

今年の誕生日もサーバといちゃいちゃする予定しかないですが、がんばって生きていこうと思います。

http://www.amazon.co.jp/wishlist/14QTNU2BN7KTR

ちなみに 2 月 18 日 が僕の誕生日になります。金曜日です。

2011-01-12

MacBook Air 11インチ欲しい!ほんとだよ。

ヨドバシMacBook Air 11インチ 見てきたんですよ、えあー。話変わりますが、最近マイクロ一眼買ったんですよ、 E-PL1 ね。CMの宮崎あおいかわいいし Amazon で半額だったのでついつい購入ね。

そしたら ビックリ 加速度センサ ないんですよ、E-PL1。写真の縦横も判断できないんですよ、E-PL1

るんるん気分で写真撮って、いざ、とりこむぞ!! ってときになって気付いたのね。そういう大事なことは、前もって言っとけと思ったね。

一気にテンションさがったね。

でも、宮崎あおいのこと考えると怒るに怒れないんですよ。あーくそ、かわいい。結局、宮崎あおいの笑顔を考えながら一枚一枚、写真を回転させるお仕事ですよ。

でも、宮崎あおい、もう E-PL1 とかのこと忘れて E-PL2 に夢中なんだろうなー。

ということで

MacBook Air 11インチ欲しい!

です。

2010-12-17

tcpflow が楽しい

パケットの中身を見るコマンドとして tcpdump が有名だけど、最近 tcpflow っていうコマンドがあることを知った。 tcpflow は tcpdump と比べてパケットの中身をより見やすくしてくれて大変すばらしい感じ。

debian 環境だけど、余裕の aptitudeインストールできる。

# aptitude install tcpflow

centos とかだと rpmfoge レポジトリにあるみたい。

とりあえず使ってみる
# tcpflow -c

c オプションは、コンソールに内容を表示してログを保存しないようにするオプションでこれつけないで、うっかり起動させるとカレントディレクトリが残念なことになる

インターフェイスを指定して起動
# tcpflow -c -i eth0

これで eth0 に流れるパケットを見ることができる。

色つけてログを見やすくする
# tcpflow -ce -i eth0

e オプションで、in と out で色分けしてくれるのでわかりやすくなる。

tcpdump っぽいことをする

tcpdumpフィルタを使えるので使ってみる。

# tcpflow -ec port 80 -i eth0

port 80 に流れるパケットを見ることができる。

下記みたいにすればサーバ宛のhttpアクセスだけ見ることができる

# tcpflow -ec dst host [ipaddress] and dst port 80 -i eth0

ふむ、便利。