hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

08年12月5日(Fri) 9時58分
TOP » Wiki [自由帳] » ADSL復活記念!Google APIs で遊ぶ。-徒然日記/2003-12-09-1-Wiki [自由帳]
Counter: 2673, today: 1, yesterday: 0

ADSL復活記念!Google APIs で遊ぶ。

ADSLが復活した記念に、Google Web APIs で遊んでみた。
まずは、参考サイト(Google Web APIsで遊ぼう)で情報収集。

  1. Google Web APIs - HomeからDownload the developer's kitをダウンロード
  2. Create a Google Accountでアカウントを取りライセンスキーを取得する。
  3. あとは、アクセス方法を考える。

このアクセス方法が、一番悩んだところだったけど、SOAP 呼び出しはいまいちよく解らないので、直接 XML を POST することにした。
得られたデータの解析は、PHP の XMLパーサーを使えばいいと思うのだけど、これもいまいち勉強不足でよく解らんので、自前で解析することにした。

結構おもしろいので、このサイトの検索で利用してみました。

簡単なソースコード

get_result_by_google("EUC-JPでURLでコードした検索語") で検索結果を配列で返します。

  • 戻り配列['title']:ページタイトル
  • 戻り配列['url']:ページURL
  • 戻り配列['snippet']:検索語周辺のテキスト
    function get_result_by_google($word,$max=10,$start=0)
    {
      $res = result_google_api($word);
      $data = str_replace(array("\r","\n"),"",$res['data']);
      $data = str_replace(array("&lt;","&gt;","&amp;"),array("<",">","&"),$data);
      $data = str_replace("<br> ","",$data);
      $ret = array();
      if (preg_match_all("/<item[^>]*>(.+?)<\/item>/i",$data,$arg))
      {
        $i = 0;
        foreach($arg[1] as $item)
        {
          if (preg_match("/<title[^>]*>(.*)<\/title>/",$item,$match)) $ret[$i]['title'] = $match[1];
          if (preg_match("/<snippet[^>]*>(.*)<\/snippet>/",$item,$match)) $ret[$i]['snippet'] = $match[1];
          if (preg_match("/<URL[^>]*>(.*)<\/URL>/",$item,$match)) $ret[$i]['url'] = $match[1];
          $i++;
        }
      }
      return $ret;
    }
    
    function result_google_api($word,$max=10,$start=0)
    {
      $word = mb_convert_encoding($word, "UTF-8", "EUC-JP");
      $license_key = ""; //ライセンスキーを設定
      
      $data = "<?xml version='1.0' encoding='UTF-8'?>
    
    <SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
       xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\"
       xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">
      <SOAP-ENV:Body>
      <ns1:doGoogleSearch xmlns:ns1=\"urn:GoogleSearch\" 
         SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">
        <key xsi:type=\"xsd:string\">$license_key</key>
        <q xsi:type=\"xsd:string\">$word</q>
        <start xsi:type=\"xsd:int\">$start</start>
        <maxResults xsi:type=\"xsd:int\">$max</maxResults>
        <filter xsi:type=\"xsd:boolean\">true</filter>
        <restrict xsi:type=\"xsd:string\"></restrict>
        <safeSearch xsi:type=\"xsd:boolean\">false</safeSearch>
        <lr xsi:type=\"xsd:string\">lang_ja</lr>
        <ie xsi:type=\"xsd:string\">utf8</ie>
        <oe xsi:type=\"xsd:string\">utf8</oe>
      </ns1:doGoogleSearch>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>";
    
      $query = 'POST '."/search/beta2"." HTTP/1.0\r\n";
      $query .= "Host: "."api.google.com"."\r\n";
    
      $query .= "Content-Type: text/xml; charset=utf-8\r\n";
      $query .= 'Content-Length: '.strlen($data)."\r\n";
      $query .= "\r\n";
      $query .= $data;
    
      $fp = fsockopen("api.google.com",80,$errno,$errstr,30);
      if (!$fp)
      {
        return array(
          'query'  => $query, // Query String
          'rc'   => $errno, // エラー番号
          'header' => '',   // Header
          'data'   => $errstr // エラーメッセージ
        );
      }
      
      fputs($fp, $query);
      
      $response = '';
      while (!feof($fp))
      {
        $response .= fgets($fp,4096);
      }
      fclose($fp);
      
      $response = mb_convert_encoding($response, "EUC-JP", "UTF-8");
      $resp = explode("\r\n\r\n",$response,2);
      $rccd = explode(' ',$resp[0],3); // array('HTTP/1.1','200','OK\r\n...')
      return array(
        'query'  => $query,       // Query String
        'rc'   => (integer)$rccd[1], // Response Code
        'header' => $resp[0],     // Header
        'data'   => $resp[1]      // Data
      );
    }
    


Name:

<<Today>>

付箋機能(wema) メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:


Reload   Diff Source Attach Attach List   Wiki Top Page List Search Resent Chenges Backup   Help   RSS feed
Page name:徒然日記/2003-12-09-1 [ Sended pings(0) ]
Author:nao-pon - 2003/12/09 22:34:42 JST(1822d)
Last edit:nao-pon - 2003/12/09 22:34:42 JST(1822d)
Editers:nao-pon
Back Link:PHP(1156d) 徒然日記(1567d)

ページコメント
 
The comments are owned by the poster. We aren't responsible for their content.

Track Back [ Track Back(0) ]
Track Back URL: http://xoops.hypweb.net/wiki/tb/468

このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?

mixiでログイン Yahoo!でログイン
メインメニュー
最新のページ
ブックマーク
Please log in to use it.
[Login]
新着トラックバック
2008-12-1 2007-12-26 2007-11-23 2007-11-21 2007-10-21 2007-9-26 2007-8-16 2007-8-15 2007-8-7 2007-7-28
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 66 人がオンライン中 :-)
(Wiki [自由帳] : 16 人)

登録ユーザ: 1 & ゲスト: 65

kazdon, もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 1470


現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報
No trackback