2007年07月02日

「phpによるスクレイピング処理入門」を書いてみた このエントリーをはてなブックマークに追加

こんにちは、バーブ佐竹です(嘘です)。

りょーちのこのサイトではphpによるプログラムを幾つか紹介したりしているのですが、一発モノが多く、体型立てて説明することがあまりないので、ちょいと説明用のサイトを作ってみた。

で、第1回目はいきなりハードル高いですが「スクレイピング処理」について書いてみることにした。

このサイトでも「スクレイピング」という言葉はたまに利用しているのだが、もう一度整理してみると、APIが提供されていないWebサービスもバックグラウンドにデータベースなどがあるはず。で、そのWebサービスはデータベースから読み込んで機械的にデータを「あるパターン」に流し込んでサイトを作成しているであろう。

なので、目に見える部分(表示されているHTMLファイル)を解析し、必要なデータのみを取得して、自前のサーバ側で再度加工して、提供するようなことができると思われる。このことを「スクレイピング(scraping)」というらしい。
ちなみに、scrapeは「削る」って言う意味なので、必要な部分を削り取って利用するってことっすね。

一見難しそうに見えますが、やっていることはHTMLファイルを取得して、パターン(規則性)を見出し、加工するってことです。

下記にphpを利用するユーザにtidy関数を用いたスクレイピング処理の簡単なプログラミングについて解説したサイトを作ってみました。



りょーち自身、スクレイピング処理について体型立てて説明されたサイトがあまりないので、殆ど独学なのであるが、まあ、入門用のサイトとして利用いただければと思うっす。

なるべく、基本概念だけ記載し、ソースを表示したり、実際稼動するプログラムを掲載したりしたので、なんとなく分かる人には分かると思われる。

上記サイトでは Tidy 関数マルチバイト文字列関数 (mbstring) の2種類を主に利用しているが、肝の部分はTidy関数であろう。

HTMLファイルを取得し、tidyオブジェクトを作成し、解析するという流れで記載してあるので、はじめての人にも(多分)分かりやすいのではないかと(勝手に)想像するっす。
上記サイトの例として取り上げたのは「はてなブックマーク」のトップページの「最近の人気エントリー」を表示するプログラムにしてみたっす。



上記サイトを読めば、こんなプログラムも10分くらいで作成できると思われる。
(はてなのサイトはとてもキレイにコーディングされているのでスクレイピングしやすいサイトの一つと言えるであろう)。

ちなみに、りょーちが Tidy 関数を利用して作成してみたサイトは下記の通り。



これらのプログラムも phpによるスクレイピング処理入門 をお読みいただければ、多分「あー、こんなことやってるんだねぇ」と推測でき、且つ、自分で同じようなもの(というかもっと素晴らしいもの)を作ることができると思われます。

なんかかっちょいいの作ったら教えてください。

なお、スクレイピング対象として、取り上げて欲しいサイトなどがあったら、上記サイトに例として作成しようと思うので、コメントなどいただければと思います。

よろしくばい。
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術

2007年06月26日

「あわせて読みたい」勝手 API for JSONPを作ってみた このエントリーをはてなブックマークに追加

こんにちは、猫男爵です(嘘です)。

サイドフィード株式会社 というブロガーにはとっても有名な会社がある。
ここでは他とかなり違ったブロガーの心をくすぐるイロイロなサービスが展開されていてかなりよい会社だと思われる。

その、サイドフィードが最近提供したサービスで あわせて読みたい というサービスがある。
BLOGのURLを入力すると、そのブログと「あわせて読みたい」サイト、つまり関連性の高いと思われるサイトを表示してあげるというもの。

この新しいサイトレコメンド(お薦め)機能は、サイドフィードの独自のロジックで推薦されているものと思われ、通常は あわせて読みたい のサイトで検索するか、サイドフィードが提供するブログパーツを用いて調べるのだが、「あわせて読みたい」のサイトをスクレイピングして、URLを入力すると、「あわせて読まれる」であろうサイトをJSON形式で出力するよーなモノをつくってみた。
ってこんなことしちゃいけないのかな? (利用規約を読む限りでは禁止されていないよーな気がするので、指摘されるまでは掲載してみよう)。

上記URLに行き、読みたいサイトのURLを入力すれば、その結果が返ってくるよーなものである。で、これはどーやってるかといえば、URLを入力すると あわせて読みたい のサイトにそのURLを渡し、表示される結果をスクレイピングし、結果を取得し、サーバ側でJSON形式に加工して出力するよーなものである。

パラメータ説明:

end point URL:
http://www.usamimi.info/~ryouchi/awasete/index.php
パラメータ:callback:
コールバック関数名を指定
パラメータ:url:
取得したいurlを指定

使い方:

callback関数:viewawasete()
url:http://ryouchi.seesaa.net/
の場合、
http://www.usamimi.info/~ryouchi/awasete/index.php?callback=viewawasete&url=http://ryouchi.seesaa.net/
などと指定する。

戻り値:

戻り値は下記のような感じ
viewawasete([{"url":"http:\/\/satokoto.blog10.fc2.com\/",
"title":" \u30d6\u30ed\u30b0\u30d1\u30fc\u30c4\u3092\u3055\u304c\u305b",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fsatokoto.blog10.fc2.com%2F"},
{"url":"http:\/\/sasori-flower.jugem.jp\/",
"title":" \u880d\u3010\u30b5\u30bd\u30ea\u3011\u306e\u7a7a\u9593",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fsasori-flower.jugem.jp%2F"},
{"url":"http:\/\/freethink.way-nifty.com\/action\/",
"title":" \u601d\u8003\u3068\u7fd2\u4f5c",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Ffreethink.way-nifty.com%2Faction%2F"},
{"url":"http:\/\/daijiman.slack77.net\/",
"title":" SLACK77 >> DAIJIMAN",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fdaijiman.slack77.net%2F"},
{"url":"http:\/\/blog.goo.ne.jp\/lysander\/",
"title":" \u5f92\u7136\u3068\uff08\u7f8e\u8853\u3068\u672c\u3068\u6620\u753b\u597d\u304d...\uff09",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fblog.goo.ne.jp%2Flysander%2F"},
{"url":"http:\/\/7thupmedia.com\/",
"title":" 7th up media",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2F7thupmedia.com%2F"},
{"url":"http:\/\/css-happylife.com\/",
"title":" CSS HappyLife",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fcss-happylife.com%2F"},
{"url":"http:\/\/d.hatena.ne.jp\/nyama\/",
"title":" Another \u671d\u9854\u65e5\u8a18",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fd.hatena.ne.jp%2Fnyama%2F"},
{"url":"http:\/\/www.iyahooi.com\/",
"title":" i yahoo i.com:blog",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fwww.iyahooi.com%2F"},
{"url":"http:\/\/www.simplexsimple.com\/",
"title":" S i M P L E * S i M P L E - \u30a6\u30a7\u30d6\u8077\u4eba\u306e\u305f\u3081\u306e\u5c0f\u7c8b\u306a\u30cd\u30bf\u5e33",
"more":"http:\/\/awasete.com\/show.phtml?u=http%3A%2F%2Fwww.simplexsimple.com%2F"}]);

まあ、 あわせて読みたい のサイトに行けば済む話しなので、需要はとっても少ないと思うが、こんなこともできるよってことでやってみたっす。

posted by りょーち | Comment(2) | TrackBack(1) | Web周辺技術

2007年06月25日

PEAR::Package::Pager を使わずphpでページング処理ができるpager()関数 このエントリーをはてなブックマークに追加

こんにちは、トカちゃんこと、渡嘉敷勝男です(嘘です)。

先日作成した Flickr 日本語検索 では、検索結果が多い場合にページ別に分けて結果を表示している。
通常検索エンジンで検索した際、その検索結果が多い場合に、「 1 2 3 4 5 6 7 8 9 10 次へ>」のようなナビゲーションがされるが、まあ、これと殆ど同じよーなものである。

phpでの実装方法がよくわからなかったのだがどうやら Pear::Pagerの使い方 (Nega Diary) を見ると PEAR :: Package :: Pager を利用するのがよろしいっぽい。
しかし、レンタルサーバなどで、気軽に PEAR ライブラリを入れられない場合は自前で実装する必要があるよーである(うーむ)

で、いろいろ探していたら、教えてgooにそのものズバリの質問があった。

ふむふむ。これを見てみると yambejpさん の回答が例を交えてなかなかわかりやすく書かれていたのでこの方法を採用してみた。

ただし、上記の方法だと、ページを区切る数などが固定されているため yambejpさん の作成されたpager()関数を(若干)汎用的にしてみた。

ちなみに改良してみたpager()関数が下記になる。


<?php
// pager()関数関連の定義
// ページ情報となる変数名の設定
define(PAGE_VALUE "id");
// ページをいくつで区切るか?
// 100件ごとに区切りたいなら100を指定
define(PER_PAGE,10);
// ページメニューの数の幅
// ページ総数 59 / VIEW_PAGE_MENU_WIDTH = 5の場合
// 26ページ目を表示しているときは下記のように表示される
// < 21 22 23 24 25 26 27 28 29 30 31 >
// 26 の前5つ分(21まで)と後ろ5つ分(31まで)を表示する
define(VIEW_PAGE_MENU_WIDTH 5);
// 前に戻るときのマーク 「< (&lt;)」とか「前」とか「←」とか指定
define(PREV_MARK "&lt;");
// 次に行くときのマーク 「< (&gt;)」とか「次」とか「→」とか指定
define(NEXT_MARK "&gt;");
// pager()関数ここから
function pager($idname,$countRe){
    
// 現在のページ情報を取得
    
$id =$_GET[$idname];
    
// ページ情報以外のパラメータを補完し、$other_paramにセット
    
foreach($_GET as $key => $value){
        
// $idname 以外のGETメソッドのパラメータを $other_param に再構築
        
if ($key != $idname){
            
// リンクさせるためにurlencodeする.
            
$other_param .= "&".$key."=".urlencode($value);
        }
    }
    
// ページ数の指定がなければページ数を1にセット
    
if($id==""$id=1;
    
// 最終ページを計算する
    // 総Hit数をページング単位で割ると総ページ数が計算される
    // ページング単位PER_PAGEを10とすると最終ページ数$maxPageは
    // 総Hit数 / PER_PAGEを切り上げたものとなる。
    // 検索結果205件 PER_PAGE:10の場合 $maxPage = ceil(205 / 10) = 21
    
$maxPage=ceil($countRe PER_PAGE);
    
// maxPage=1の場合(PER_PAGEより少ない検索結果)
    // 選択したページ数(id)よりもmaxPageが小さいときはfalse
    
if( ($maxPage == 1) or ($maxPage $id) ) return false;
    
// 選択したページ数がVIEW_PAGE_MENU_WIDTHより大きいとき
    
if($id VIEW_PAGE_MENU_WIDTH 1){
        
// スタートページは選択ページからVIEW_PAGE_MENU_WIDTHを
        // 引いたもの程度出せばよい
        
$startPage $id VIEW_PAGE_MENU_WIDTH;
        
// より小さいもの「 < 」の部分はさらにその$startPageから1を引いたもの
        
$startMore "<a href=\"$PHP_SELF?".$idname."=".($startPage 1).$other_param."\">".PREV_MARK." </a>";
    }else{
        
// そうでなければ$startPage=1(一番はじめのページ = 1)になる
        
$startPage 1;
    }
    
// 選択したページ数に5を足したものより、更に$maxPage
    // (最大ページ)が大きければ
    
if($id VIEW_PAGE_MENU_WIDTH $maxPage){
        
// 表示される最終ページは選択したページに
        // VIEW_PAGE_MENU_WIDTHを足したものになる
        
$endPage $id VIEW_PAGE_MENU_WIDTH;
        
$endMore " <a href=\"$PHP_SELF?".$idname."=".($endPage 1).$other_param."\"> ".NEXT_MARK."</a>";
    }else{
        
// そうでなければ、$endPageは最終ページになる
        
$endPage $maxPage;
    }
    
// ここまでで、計算されたのは
    // $id        : 現在選択しているページ番号
    // $maxPage   : 検索の最終ページ
    // $startPage : 表示されるはじめのページ
    // $endPage   : 表示される最後のページ
    // $page_footer="" として$page_footerを初期化
    
$page_footer="";
    
// $startPage から $endPageまで繰り返し
    
for($i $startPage $i <= $endPage $i++){
        
// $i = $idだったら選択されたページなので、fontsizeを大きくする
        // その際、リンクはなし
        // そうでなければ、id=$iをリンクにセットする
        
$page_footer.= " ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?$idname=$i$other_param\">$i</a>");
    }
    
// $startMoreと$endMoreを$page_footerの前後に付け足す
    
$page_footer $startMore.$page_footer.$endMore;
    
// $page_footerを表示
    
print $page_footer;
}
// pager()関数ここまで

?>



yambejpさん の作成された元のpager()関数がよくできているため、若干の修正でできたよーである。

利用する際はページ用の変数として利用する変数名と総ページ数を渡せば自動的にpager()関数が変数名を_GET[]から探してきて、リンクを作成するよーになっている。

ページ変数がidで総ページ数が420件の場合は

pager( "id" ,420);


のように指定すればよい。

勿論DBなどと連携する際は、総ページ数を取得したり、一覧を表示させたりするのはきちんと php で書かなきゃだめですよ。

うーむ、なかなか便利ばい。

posted by りょーち | Comment(33) | TrackBack(1) | Web周辺技術

2007年06月21日

php と flickr APIを使った写真検索 このエントリーをはてなブックマークに追加

こんにちは、浅茅陽子です(嘘です)。

以前 Flickr の写真をBLOGに貼る Flickr Tag というものをテキトーに作ってみたが、実はその際は Flickr Services というFlickrで提供されているAPIは全く使っていなかった。ちなみに、Flickr TAGではFlickrが提供するRSS情報を元に写真を表示するような実装方法だった。

で、このBLOGにFlickr APIについての問い合わせが先日あったので、ちょいと調べてみると、APIでいろいろできそーなことがわかってきた。

なので、試しに Flickr の日本語検索サイトを作ってみた。



まあ、上記サイトではFlickrの写真を検索できるよーなものなのだが、ここでは Flickr API を php で利用する方法についてメモっておく。

FlickrのAPI の基本は REST , XML-RPC , SOAP形式で指定されたAPIのエンドポイントにパラメータを渡し、その結果を REST , XML-RPC , SOAP , JSON , PHP(シリアライズ)で取得できるよーになっている。

また、APIにリクエストを投げるときには、API Keys が必要になる。API Keys は、

http://www.flickr.com/services/api/keys/

にアクセスして各自のAPIキーを取得する。
また、リクエスト時に日本語のような2バイト文字列を渡したい場合はUTF-8でURLエンコードした形式でリクエストする。

レスポンスのフォーマットは上記の5種類選択できるが、エンドポイントにリクエストを投げる際に format=rest とか format=json とかって感じにすればよい。

今回はとりあえずRESTなるものを使ってみた。

例えば、APIKEYが「abcdefgabcdefg」の場合「公園」に関係する写真を検索するには、こんな感じで書けばよいはず。


define (APIKEY , "abcdefgabcdefg");
define (PER_PAGE , 100); // 100ページごと区切る
$str = "公園";
$page = 1; // とりあえず1ページ目
// proxyを利用する場合は $use_proxy = 1;
$use_proxy = 0;
$proxy_host = 'proxy.example.com';
$proxy_port = 8080;
$no_proxy = array(
  'localhost', // localhost
  '127.0.0.0/8', // loopback
);
include('proxy.php');
$url = "http://www.flickr.com/services/rest/?";
$url .= "method=flickr.photos.search";
$url .= "&format=rest";
$url .= "&api_key=".APIKEY;
$url .= "&page=".$page;
$url .= "&per_page=".PER_PAGE;
$url .= "&text=".urlencode($str);

$rdata = http_request($url);
$data = $rdata['data'];
$xml = simplexml_load_string($data);


ここまでくれば、$xmlにデータが取得できているので、あとはforeachで、


foreach($xml->photos->photo as $item){
  if ($item['title']<>""){
    echo $item['title'].'<br />';
  }else{
    echo '(タイトルなし)<br />';
  }
}


って感じにすればよさそう。
print_r($xml); などとしてxmlファイルにどんな感じで取得されているかを見るってのがよろしいと思われる。

更に上記XMLファイルから写真のidを$item['id']で取得し、そのidを利用して写真の詳細情報を更に取得すればよかろう。

また、$strは通常フォームから入力されたものになるので、
$str = $_GET['word'];
などとなるよーな感じであろう。

この基本ができれば、あとは Flickr Services と睨めっこしてなんとかなる(はず)。

うーむ。結構便利だな。
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術

2007年06月18日

どの検索エンジンから検索されたのかを知るスクリプトのテスト このエントリーをはてなブックマークに追加

こんにちは、李白です(嘘です)。

アクセス解析エンジンでよく見かける検索エンジン毎のrefererを知る方法はどうやるのかよくわかんなかったので、想像でテストスクリプトを作ってみた。

get_term()関数で場合わけをしてみて、どの検索エンジンからのパターンかをチェックする。

ホントは、
if (@$_SERVER['HTTP_REFERER'] != ''){ 
$refer = $_SERVER['HTTP_REFERER'];
}
とかって感じにするのであろう。

get_term()の中で文字コードが UTF-8 でないものは mb_convert_encoding を利用して変換してみる。

get_term()関数の場合わけを増やせば、他の検索エンジンにも簡単に対応できるよーな気もする。

で、更に、javascriptで読み込んで結果をMySQLに入れればアクセス解析ソフトができそーな予感がするっす。

誰か、汎用的な関数作ってくれないかなぁ・・・

posted by りょーち | Comment(0) | TrackBack(0) | Web周辺技術

2007年06月15日

twitter API と MOGO2 もごもご APIの仕様が殆ど同じな件 このエントリーをはてなブックマークに追加

こんにちは、新藤恵美です(嘘です)。

最近、Webサービスと同時にAPIを公開しているサイトがかなり多くなっているっぽい。
APIを公開する意味はサービスによっていろいろあると思われるが、大きくは下記のよーなものではないかと思われる。
  • サービスの認知(トラフィック増大を目論む)
  • 基本仕様以外の部分はユーザで拡張して貰うことで新たなサービスの創出を狙う
  • 他の優良なサービスとのマッシュアップを期待

他にもイロイロあるんだろうけど、まあこんな感じだと思われる。
で、中には「サービスの認知」の手法として、公開APIを使ったプログラムコンテスト的なものも開催されるよーになったりしている。

そんななか、最近週1くらいのペースでサービスが立ち上がりつつあるミニブログ業界(ってそんな業界ある?)の中で ミニブログ「もごもご」 というサービスがあるっぽい。

世界的には、多分 Twitter とか Tumblr などが有名だったりするよーである。

先日言及した Feecle[フィークル] といい、Second Lifeからも使える Wassr とか ライブドアの nowa とかexciteの つぶろぐ とか 今をメモする「Timelog」 とかもそーなのかねぇ?まあ、兎に角多すぎですわ。

で、他にどんなのあるのかと思ってみたら、katsuoさんが pruto.jp - 最近のミニブログとかまとめ に素晴らしくまとめて書いていらっしゃるのでミニブログに関してはそちらをご覧いただければと思います(って、こんなにあるんっすねー)。

で、話しを元に戻すと、マッシュアップの話し。
先ほどの ミニブログ「もごもご」 では ミニブログ「もごもご」|もごもごAPI、マッシュアップコンテスト なるものを開催しているよーである。
ふむふむと思いながら ミニブログ「もごもご」|もごもごAPI 仕様書を見て軽い既視感(ってなんで、IMEで変換されないんじゃ?)を覚えた。
これ、どっかで見たことある・・・

そーである。このもごもごAPIってTwitterのAPIそっくりである。
うーむ。そこまでパクるか?
Twitter API Documentationミニブログ「もごもご」|もごもごAPI を見てみると、すげー似てるよ。ポップコーンの正一と正二くらい似てる(謎)。

試しにどれくらい似ているのか使ってみた。



上記では最新の発言を取得するだけのものなのだが、ソースの使い回しがかなり可能なほど、激似っす。ソースを公開してみたので、詳細はそちらをみていただければと思うっす。

もちろんサービスとしての振る舞いも似ているのだが、プログラマーを取り込むためには、やっぱ、長いもの(Twitter)に巻かれろ的な意図があるのだと思われる。

「Twitter用に開発したものは、Mogo2に簡単に移植できるよ」ってのを知らしめたいのではなかろうか?

うーむ。今後どんなサービスの拡がりを見せるのかに興味あるねぇ・・・
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術

2007年06月13日

Youtubeの動画(FLV)をダウンロードする方法がわかった このエントリーをはてなブックマークに追加

こんにちは、本居宣長です(嘘です)。

Youtubeのダウンロードを実装しているサイトが幾つかある。
どーやっているのか皆目見当がつかなかったので「おー、すごいね」という感じでユーザとしてたまにダウンロードしてみたりした。

で、先日そこのサイトを久々に使ってみたら、どーやらダウンロードできなくなっていた。結果的に現在はそのサイトでもダウンロードできるよーになっているのだが「うーむ」と思い、自分でダウンロードできるよーなスクリプトができないものかと適度に調べていたら拍子抜けするくらい簡単に実装できることがわかったので、早速作ってみた。



上記サイトに行き、YouTubeのサイトのURLを入力すると、FLVをダウンロードできるリンクが表示されるっす。それを徐に右クリックして、ディスクに保存するっす。

ファイル名のデフォルトは「get_video」という名前になるので、これを「hoge.flv」などという適当な名前で保存するとよいと思われます。

サーバで全てを読み込んでContent-Typeとかを変更してごにょごにょするのかとおもったら、どーやら違うっぽい。うーむ。そうだったか。

ちなみに YouTube検索用に適当に作った YouTube TAG Search で検索したものもサムネールの下にある小さな をクリックすることでダウンロードできるよーにしてみた。

保存したFLV形式の動画再生には Riva FLV Player などを利用するとよいでしょう。

ついでにブックマークレットも作ってみた。
Get Youtube File
(右クリックでお気に入りに追加してください)

Youtube上で動画を閲覧している際にこのブックマークレットを選択するとこの画面でダウンロードできるようになります。

つーか、作り終わって気づいたが、これ YouTube API 全く使ってないっす(うーむ)。

■上記サイトでやっていること
  1. YouTubeのURLを取得
  2. 取得したYouTubeのURLからダウンロード用のURLを生成
  3. 生成したダウンロード用のURLにphpで
    header("Location",$url);
    のようにしてダウンロード画面に移動(ダウンロード用のURLを呼び出せば自動的にダウンロードされるっぽい)
ふーむ、なるほどのぅ・・・
posted by りょーち | Comment(2) | TrackBack(0) | Web周辺技術

2007年06月12日

Feecle 勝手 API for JSONP をつくってみた このエントリーをはてなブックマークに追加

こんにちは、ボブ佐久間です(嘘です)。

Twitter が未だに根強い人気を誇っているよーである。一行日記とかミニブログとかどういう括りになっているのかよーわからんですが、日本発のサービスも幾つか登場しているっぽい。

そんな中で ミニブログ Feecle[フィークル] “みんな、今なにしてる?” ってサービスを見てみた。
なんとなく Twitter の文化とちょっと違う感じの発言がされているよーにも見えなくはないが Twitter のよーに API などを提供するとよさそーな気がするっす。

で、勝手に Feecle の API をテキトーなのを2個作ってみた。
「勝手に作ってみた」ってのは例の如くサイトをスクレイピングしてJSONPで渡す手法を使っているのでサイトのデザインやHTMLの構成が変わると使えないっす・・・orz


以下パラメータ説明。

1. feecle トップページ情報取得 API
end point URL:
http://www.usamimi.info/~ryouchi/feecle/feecle_top.php
パラメータ:callback:
コールバック関数名を指定
http://www.usamimi.info/~ryouchi/feecle/feecle_top.php?callback=hoge
とかって感じに使うっす。
戻り値は、user,href,commentの3つの値をJSONP形式で返しています(UTF-8エンコードしています)。

2. feecle ユーザ記入コメント取得 API
end point URL:
http://www.usamimi.info/~ryouchi/feecle/feecle_user.php
パラメータ:callback:
コールバック関数名を指定
パラメータ:user:
ユーザ名を指定
http://www.usamimi.info/~ryouchi/feecle/feecle_user.php?callback=viewfeecleuser&user=ryouchi
とかって感じに使うっす。
戻り値はcommentの値をJSONP形式で返しています(UTF-8エンコードしています)

上記にサンプルを記載してみたので多分使えると思われるっす。

つーか、こんなことしていいのかなぁ・・・
posted by りょーち | Comment(0) | TrackBack(0) | Web周辺技術

2007年06月08日

digg APIを使って Upcoming Stories を表示するテスト このエントリーをはてなブックマークに追加

こんにちは、原坊こと原由子です(嘘です)。

Digg といえば、世界のはてブ的なソーシャルブックマークっぽいサービスだが、Digg API というものがあるよーである。

なので、APIオタクのりょーちとしては理由もなく使ってみたかったので使ってみた。

digg APIはその機能があまりに充実しているので、digg上の殆どの操作がAPIを経由してできてしまうよーな気がする。

まあ、第一弾としては、digg の Upcoming Stories を表示するよーなものをつくってみた。

diggでは幾つかのカテゴリーが存在しているのだが、上記のプルダウンメニューもdigg APIから動的に取得してプルダウンメニューを作ってみているっす。

あまりに機能が多すぎるので、まだ全て読みきれていないが、結構面白いAPIである。
やるなー。digg。

posted by りょーち | Comment(0) | TrackBack(0) | Web周辺技術

2007年05月29日

JSONを使ってYouTubeを光速検索する「Youtube光検索」を作ってみた このエントリーをはてなブックマークに追加

こんにちは、糸居五郎です(嘘です)。

久々に YouTube ネタ。

最近JSONにプチはまり中である(遅い?)。
以前、Youtube APIを利用して YouTube TAG Search っていうのを作ってみたが、最近覚えた JSON とやらを利用すればもうちょい速くなるのではなかろうかと思い、JSONを使って作ってみたら、やっぱ、JSON使ったほーが速かった・・・orz
で、こんなものを作った。



余計な機能を排除してみたので(当たり前かもしれんが)本家 YouTube よりもかなり検索が速いよーな気がする。(自画自賛っぽい発言なのでダメ?)
JSON を使うと Javascript の XMLHttpRequest を使った通信(よく知らんが AJAX って言うんだっけ?)のメリットとしてよく挙げられている、画面全体をリプレースするのではなく、ホントに表示を変更したいとこだけを innerHTML で置き換えちゃうことができるよーに作れて便利だな。

YouTube API から送られてくるXMLデータをJSON形式に加工し、表示するだけの簡単なものなのだが、JSONデータを解析する部分をどーやって書けばよいかがよくわかんなかったところに 昨日のエントリー にも記載した JSONER で解析しながら、JSON形式のデータを加工してみた。
また YouTube APIのパラメータはUTF-8でエンコードしたものを渡す必要があるのだが Javascript でこれを実装するのに Escape Codec Library: ecl.js を利用している。

うーむ、なかなか便利じゃないですか?
JSON素晴らしいっす!
posted by りょーち | Comment(4) | TrackBack(0) | Web周辺技術