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
      );
    }



Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 17, today: 1, yesterday: 0
Princeps date: 2003-12-09 (Tue) 22:34:42
Last-modified: 2003-12-09 (Tue) 22:34:42 (JST) (6130d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





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

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

もっと...
サイト情報