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

19年5月19日(Sun) 23時04分
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
      );
    }



Post a new comment

Subject
guestname
Body

Go to richer form

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: 5632, today: 1, yesterday: 0
Princeps date: 2003-12-09 (Tue) 22:34:42
Last-modified: 2003-12-09 (Tue) 22:34:42 (JST) (5640d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 22 人がオンライン中 :-)
(UsersWiki : 1 人)

登録ユーザ: 0 & ゲスト: 22

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

nao-pon
 

登録ユーザ数: 4604


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報
No trackback