なんて言えばいいかわからないからタイトルがおかしいけど(゚ε゚)キニシナイ!!

前回、ソーシャルサービスのRSS習得について載せたけどFlickr だけは少しだけ特殊なので
簡単に一例を公開したいと思う。
まず、用意するもの。

  • PEARパッケージ(HTTP/Request2)と依存パッケージ
  • simple_html_dom.php

このへんは名前でぐぐって入れておいてください。
Pearは依存関係とか 面倒なので自分で(ry

で、いれたこと前提に書きます。


// ライブラリを読み込み require_once 'HTTP/Request2.php'; $flickr_id = ''; // HTTP_Request2は例外を投げてくれるのでtryを使う try{ // インスタンスを作成 $request2 = new HTTP_Request2(); // リクエスト先URLをセット @$request2->setUrl('http://idgettr.com/'); // 送信方法をPOSTに設定 $request2->setMethod(HTTP_Request2::METHOD_POST); // POSTパラメータをセット $url = "http://www.flickr.com/photos/".$id."/"; $param = array('photostream' => $url); $request2->addPostParameter($param); // リクエストを送信 $result = $request2->send();
// レスポンスのボディ部を表示 $response = $result->getBody(); // PHP Simple HTML DOM Parser読み込み require_once(APP.'vendors/simple_html_dom.php'); $html = str_get_html($response); foreach($html->find('div[id=result]') as $row){ $row = $row->plaintext; $row = mb_convert_encoding($row, "UTF-8", "auto"); }
$row = trim($row); //余分な空白削除 $ex = explode(':',$row); // id:xxxx@xxxxxを分割 $flickr_id = trim($ex[1]); } catch( HTTP_Request2_Exception $e ){ // HTTP_Request2のエラーを表示 return false; } catch (Exception $e){ // それ以外のエラーを表示 return false; } return $flickr_id;

これで、指定したサーバーフォームへデータをPOST したことになります。
例だとFlickrのIDを取得するサービスでやってます。
他のサービスでもフォームの名前とかわかればどうとでもなります。

つまり、amazonだとかGoogleだとか、ヤフオクですら可能です。
認証が必要な場合も、ちゃんと認証用の設定があるのでそれを使えばおk.
ユーザーがあたかも操作したかのように見せることが出来るわけです。

で、戻ってきたデータは生のHTMLなので整形してやらないといけないんだけど
正規表現とかで抜き出すのはテラ面倒です・・・
調べてたら、JQueryみたいにDOMで操作出来るようにするライブラリ発見!
作った人さすがやでーー!!!

早速使ってみたのが、str_get_htmlの部分。
これで$html->find(”要素”)で色々習得出来る!(゚∀゚)
鬼便利すぎてやばい。
正直、こっちを発見したことのほうが熱いw
Parserとかって自分でやるとめっちゃ大変だから、こういうのありがたすぎる。

PHP Simple HTML DOM Parser



話は戻ってFlickrIDへの変換方法箇所。
戻ってきたHTMLを整形して、div[id=result]を抜き出す。
Flickrは結果を<div id="result">ID:xxxyy@xxxx</div>みたいにに戻してくれるので
ここを抜き出してtrimしてと色々小技を駆使。

これで無事FlickrIDをFlickrで利用する形式に変更出来ましたとさ。
問題点は、このWebサイトが使えなくなる&吐き出されるHTMLが変わると面倒ってことですね。
おとなしくAPI使っておけよって話かもしれないけど、そん時はまた考えるw