2008/01/31


どこでもスターグリースモンキーがSafariとfubに対応しました
Operaのuser.jsに対応してみました。
たぶん行けそう
patchの適応の仕方が分からない人は、下の「+」が付いてる行だけ抜き取って先頭の「+」を全部削除、その後「HatenaStarEverywhere.user.js」の一番おしりに貼り付けて保存するか、はてな側の対応を待ちましょう。
--- HatenaStarEverywhere.user.js.orig   Mon Oct 01 10:37:41 2007
+++ HatenaStarEverywhere.user.js    Wed Oct 03 12:44:20 2007
@@ -139,3 +139,37 @@
         }
     });
 }
+
+if (typeof unsafeWindow == "undefined") {
+    var unsafeWindow = window;
+}
+if (typeof(GM_setValue) != 'function') {
+  function GM_setValue(key, value) {
+    document.cookie = [
+      name, '=', escape(value),
+      ';expires=', (new Date(new Date() + 365 * 1000 * 60 * 60 * 24)).toGMTString()
+    ].join('');
+  }
+}
+if (typeof(GM_getValue) != 'function') {
+  function GM_getValue(key) {
+    var r = new RegExp('/' + name + '=([^;]*)/'), m;
+    if (m = document.cookie.match(r)) return unescape(m[1]);
+    return value;
+  }
+}
+if (typeof(GM_setValue) != 'function') {
+  function GM_xmlhttpRequest(opt) {
+    var x=new XMLHttpRequest();
+    x.onreadystatechange=function() {
+      switch(x.readyState) {
+        case 4:
+          opt.onload(x);
+          break;
+      }
+    };
+    x.open(opt.method,opt.url,true);
+    x.setRequestHeader('Content-Type',opt.mime);
+    x.send(null);
+  }
+}
追記1
すみません。はてな内リソースでしか有効にならないようです。もう少し考えてみます。(_ _;)
追記2
修正はこちら
Posted at by




その1:RSSからstrfile形式のファイルを作る

まず、XML::RSSが入ってなかったのでcpanから入れた。
その後、anontwit/twitterのRSSフィードを適当にstrfile形式にするperlを書く。
#!/usr/local/bin/perl

use encoding 'utf-8';
use strict;
use LWP::Simple;
use XML::RSS;

my $content = get('http://twitter.com/statuses/user_timeline/anontwit.rss');

my $rss = new XML::RSS;
eval {
$rss->parse($content);
};

print "%\n";
for my $item (@{$rss->{'items'}}) {
print "$item->{title}\n%\n";
}

exit;

その2:fortune形式に変換して設置する

なんでstrfileって、/usr/sbinに入ってるんだろ...
# mkdir ~/.anontwit
# ./anontwit.pl > ~/.anontwit/anontwit
# /usr/sbin/strfile ~/.anontwit/anontwit ~/.anontwit/anontwit.dat

その3:メーラに仕込む

愛用のメーラ「mutt」の設定ファイル、~/.muttrcにシグネチャ設定を入れる send-hook '~A' 'set signature="fortune ~/.anontwit|"'

その4:メールを書く

anontwit

その5:殺伐とした空気を味わう

殺伐とした空気を味わいながら、ただただ返信を待つ。





良く考えたら、メール書く際に最新取ってくるってのもいいかも。あとtwitterって20件までしかデータ取れないのね...orz。
Posted at by




もうタイトルは無視して頂いてかまいません。

さて、先日からC++版IronPython版CPython版とmixi APIを使ったコードを書いてきましたが、今日は実際にアプケーションを作ってみたいと思います。ただ先日も書いた通り、現状のmixi APIは足跡くらいしかWebAPIとして使える物がなく、POST(PUSH)やDELETEなどの更新系メソッドも無い為、純粋に、ただ純粋に、足跡をXMLデータとして参照するくらいしか出来ない状況にあります。

さっさと他のAPI出してくれなきゃブログネタが持たないよ...

唯一できそうなものとして、足跡監視ツールくらいですか...
先日作ったCPython用のMixiAPI.pyを使って足跡をポーリングし、新しい足跡があったらお知らせするってシステムを作ってみましょう。
作り方は簡単。get_footstamps()でfootstampディクショナリのリストを受け取り、前回値と比較します。日付ソートした状態でIDが異り始めれば、最初のレコードから違ったレコードまでが新規足跡になる訳です。
以下のソースでは、相異点毎にコンソール出力しています。コンソール出力部分の直下に、「firefox-remote」等を引数「link」で起動するよう修正すれば、「自動足跡踏み返し機」が出来上がる訳です。これを使えば貴方のたるんだ腹筋もどんどん引き締まっていきます。

はぁ...こんなものしか作れないAPIって...
もう...寝ます...

#しかしこのAPIサーバ、よく失敗を返しますね...

MixiAPI.pyにHTTPステータス判定を追加しました。
以下のソースと合わせ、下のダウンロードリンクからダウンロード願います。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import time
import MixiAPI

if len(sys.argv) < 3:
    sys.exit()

service = MixiAPI.Service(sys.argv[1], sys.argv[2])
oldstamps = []
while 1:
    try:
        footstamps = service.get_footstamps()
        # 比較対象がある場合のみ処理
        if len(oldstamps) > 0:
            # 更新日付でソートする(降順)
            footstamps.sort(lambda x, y: cmp(y['updated'], x['updated']))
            n = len(footstamps)
            for i in range(n):
                # idが異なり始めるインデックスを取得する
                if footstamps[i]['id'] == oldstamps[0]['id']:
                    break
            # 全てが異なる場合は全項目検知とする
            i -= 1
            while i >= 0:
                print footstamps[i]['title']
                # ここに footstamps[i]['link'] を引数に持った
                # firefox の起動コマンドを入れておけば、
                # 足跡踏み返しシステムが出来上がる。
                i -= 1
        oldstamps = footstamps
        # del oldstamps[0]
    except:
        pass
    time.sleep(3)

ダウンロード:,
Posted at by