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

TOP » UsersWiki » nao-pon » blog » 2003-12-09-1

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

Tag: ネット プログラミング
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パーサーを使えばいいと思うのだけど、これもいまいち勉強不足でよく解らんので、自前で解析することにした。

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

Page Top

簡単なソースコード anchor.png

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

  • 戻り配列['title']:ページタイトル
  • 戻り配列['url']:ページURL
  • 戻り配列['snippet']:検索語周辺のテキスト
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    
    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
      );
    }



トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 254, today: 1, yesterday: 0
初版日時: 2003-12-09 (火) 22:34:42
最終更新: 2003-12-09 (火) 22:34:42 (JST) (7405d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
最近の更新
オンライン状況
206 人のユーザが現在オンラインです。 (8 人のユーザが UsersWiki を参照しています。)

登録ユーザ: 0
ゲスト: 206

もっと...
サイト情報