4sqの情報をプレビュー

概要

アドベントカレンダー13日目。今日は外部のサービスを駆使してfoursquareの短縮URLをプレビューしてみます。

内蔵のプレビューウィンドウはJpg/Png/Gifぐらいしか表示してくれません。でも今表示したいのはウェブサイト。どうにかして画像に変換しなくては…!

というわけでスクリプトで解決してみました。

スクリプト

// のいえ先生のところから拝借しました。
function Format(format /*,obj1,obj2...*/)
{
    var args = arguments;
    return format.replace(/\{(\d)\}/g, function(m, c) { return args[parseInt(c) + 1] });
}

function getThumbnailId(url){
    var html = Http.downloadString("http://kwout.com/grab?address=" + encodeURIComponent(url));
    html.match(/HRK.id = "(.*?)";/);
    return RegExp.$1;
}

function getThumbnailIdFromId(id, x, y, w, h){
    while(true){
        var resp = Http.postRequest("http://kwout.com/api/capture/", "id=" + id + "&size=large", 1);
        var o = eval('(' + resp.body + ')');
        if(o.status == "done") break;
    }
    var resp = Http.postRequest("http://kwout.com/api/crop/", 
        Format("id={0}&size=large&topleft={1}%2C{2}&bottomright={3}%2C{4}", id, x, y, x + w, y + h), 1);
    var o = eval('(' + resp.body + ')');
    return o.id;
}

function getThumbnailUrlFromId(id){
    var html = Http.downloadString("http://kwout.com/quote/" + id);
    html.match(/HRK.image = '(.*?)';/);
    return RegExp.$1;
}

function getWebPageThumbnail(url, x, y, w, h){
    var id = getThumbnailId(url);
    id = getThumbnailIdFromId(id, x, y, w, h);
    return getThumbnailUrlFromId(id);
}

System.addOpenUrlHandler(function(url){
    if(url.match(/https?:\/\/4sq.com\/[a-zA-Z0-9]+/)){
        return getWebPageThumbnail(url, 673, 222, 321, 343);
    }else return;
});

解説

System.addOpenUrlHandler?関数でURLに対するプレビューURL取得処理を拡張できます。この拡張機能を使って今回は4sq.comへのURLの場合はWebページの画像を取得するようになっています。

今回は外部のキャプチャサービスにkwout.comというのを使いました。勝手にスクレイピングでアクセスしてごめんなさい。このサービスはURLを投げつけるとキャプチャしてくれて、画像URLを取得できるサービスです。しかも、このサービスは画像の一部を切り取ってくれます。まさに今回の条件にぴったりです。

Webサービスへのアクセスに関する部分は、Http.downloadString関数や、Http.sendRequest関数を使っています。前者はGETリクエストを行い、文字列でレスポンスを返します。後者はPOSTリクエストを行い、ヘッダやボディを含んだ構造体を返却します。

これらの関数を使って、切り出した画像のURLをイベントハンドラの戻り値として渡せば…4sq.comのプレビュー機能拡張ができあがりです!

コメントとか


もし見えてたら空欄にしてね!:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-27 (土) 10:33:40 (1446d)