2009年11月20日金曜日

Tombloo スクリプト

最近Yahoo PipesとTwitter Feedの連携がうまくいかずブクマしたものがなかなか自動投稿されない悲しい状態になってたので、Tomblooから直接ついったーへ投稿する方式に切り替えようと思う。
ただ、Tomblooのデフォルト投稿形式が気に入らないので何とかカスタマイズしたいと思ったんだけど、scriptフォルダに何か.jsファイルを置けばいろいろできるという記述までは見つけたが、その先の情報がぜんぜんみつからん。

参考資料

公式ページっぽいところもいまいちよくわからんし
結局この辺をみながら見よう見まねでコードを書いてみた。

大まかな動作

どうもaddBeforeという関数とaddAroundという関数があって、こいつらを書いてやるとアイテムを加工できるみたい。書式としては
addAround(Twitter, 'post', function(proceed, args) {
    return proceed(args);
});
addBefore(Twitter, 'post', function(ps) {
});
この2種類のようで、Twitterのところがそれぞれのサービス名にあたるようだ。あくまで正式なマニュアルを見つけられなかったので勘でしかないんだが・・・
んでaddAroundのproceedってのが関数オブジェクト?みたいのでargsを渡してやると実際に投稿されるみたい。戻り値はエラーとかリザルトとかの結果オブジェクトみたいなのでreturnで返してやればいいようだ。
addBeforeはそれ以前の段階でのアイテムの加工のようだ。
addBeforeのpsオブジェクトとaddAroundのargs[0]は同じものみたい
メンバーに
page
pageUrl
type
item
itemUrl
tags
description
これらを含んでるようだ。ここを加工してやればいいみたい。

アイテムオブジェクトは参照?

addBeforeとかaddAroundに渡ってるくる変数がどうも参照みたいで、途中で変に加工すると別のところにクロスポストされるときに加工済みのものがわたってしまってtwitterのだけ加工したいとかってのができない。さっきのリンクページにあったおまじない
var ps = args[0] = update({}, args[0]);
をやってpsを加工してやってから proceed(args)してやると
そのサービスに対してのみ加工したものが反映されるみたい。意味はしらん!俺はJavaScript使いじゃねー

最終目標

というわけで、目的はTwitterに投稿するときに「ページタイトル:コメント 短縮URL」って投稿されるものを「[B!]コメント:ページタイトル 短縮URL」にすること
で、出来上がったスクリプトがこれ
addAround(Twitter, 'post', function(proceed, args) {
    switch (args[0].type) {
        case "link":
            // クロスポストを考慮し、psをそのまま改変しない
            var ps = args[0] = update({}, args[0]);
            ps.item = ps.item || "";
            ps.item = "[B!]" + ps.description + ":" + ps.item;
            delete ps.description;
            break;
    }
    return proceed(args);
});
とりあえずlinkの時だけ対応してみた。今日はとりあえずここまでー

0 件のコメント:

コメントを投稿