お気に入り | 日本語 | ログイン

デベロッパー ガイド

AJAX Feed API を使用すると、JavaScript だけを使用して、公開されている Atom フィードや RSS フィードをダウンロードすることができるので、自分のコンテンツや Google Maps API などの他の API に、フィードを簡単にマッシュアップできます。Flash や、その他の JavaScript を使用しない環境において、API では直接の RESTful インターフェース New! を公開します。エンコードされた JSON の結果を返します。これらの結果は、ほとんどの言語やランタイムによって容易に処理できます。

目次

対象読者

このドキュメントは JavaScript プログラミングとオブジェクト指向プログラミングの概念に精通している方を対象に作成されました。ウェブ上では、多数の JavaScript チュートリアルが公開されています。

概要

AJAX Feed API を使用すると、JavaScript のみを使用して、公開されている Atom フィードや RSS フィードをダウンロードすることができるので、自分のコンテンツや Google Maps API などの他の API に、フィードを簡単にマッシュアップできます。次に、簡単なプログラムの例を示します。

JavaScript と XMLHttpRequest では Same-Origin Policy (SOP) が使用されます。このポリシーにより、スクリプトは HTML を含むページの提供元のホストと同じホストからデータにアクセスできますが、他のホストからはアクセスできません。これにより、ユーザーは特定のクラスのスクリプティング攻撃から保護されますが、多くのデベロッパーは AJAX ベースのマッシュアップができません。Google AJAX Feed API は、ウェブ上の一定のタイプのコンテンツ、シンジケーション フィードに関して、この制約へのシンプルな対応策を提供します。AJAX Feed API によるユーザーのセキュリティ保護方法については、ページ下のセキュリティ上の注意をご覧ください。

はじめての Google AJAX Feed API

この API について学習を始める近道は、単純な例をご覧いただくことです。次の例では、Digg の RSS フィードをダウンロードして、フィード エントリのタイトルを表示します。

<html>
  <head>
    <script type="text/javascript" src="http://www.google.com/jsapi?key=YOUR_KEY_HERE"></script>
    <script type="text/javascript">

    google.load("feeds", "1");

    function initialize() {
      var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
      feed.load(function(result) {
        if (!result.error) {
          var container = document.getElementById("feed");
          for (var i = 0; i < result.feed.entries.length; i++) {
            var entry = result.feed.entries[i];
            var div = document.createElement("div");
            div.appendChild(document.createTextNode(entry.title));
            container.appendChild(div);
          }
        }
      });
    }
    google.setOnLoadCallback(initialize);

    </script>
  </head>
  <body>
    <div id="feed"></div>
  </body>
</html>

この例をダウンロードして編集し、さまざまなことを試してみてください。このとき、ファイル内のキーを自分の Google API キーに書き換えてください。

ページに AJAX Feed API を組み込む

ページに AJAX Feed API を組み込むには、Google AJAX API のスクリプト タグを含めることと、google.load("feeds", "1") を呼び出すことが必要です。

<script type="text/javascript" src="http://www.google.com/jsapi?key=YOUR_KEY_HERE"></script>
<script type="text/javascript">
  google.load("feeds", "1");
</script>

最初のスクリプト タグにより、google.load 関数を読み込みます。これにより、個々の Google API を読み込めるようになります。google.load("feeds", "1") により、「フィード」API の Version 1 を読み込みます。現在、AJAX FEED API は Version 1 ですが、今後新しいバージョンが提供される可能性があります。詳しくは、このページのアップデートについての説明をご覧ください。

API の読み込みに 2 つのステップが必要なのは、Google が AJAX API の読み込みを新しいモデルに移行しているからです。これにより、ページ内に複数の Google API を簡単に組み込めるようになります。新しい AJAX API 読み込みメカニズムを提供開始する際には、Google AJAX API Blog でご案内します。

JSON 形式と XML 形式の結果

AJAX Feed API は、フィードを JSON 形式と XML 形式で返すことができます。デフォルトでは、フィードは JSON 形式で返されます。

AJAX Feed API の JSON 形式は、オリジナルのフィードを簡素化し、標準化したものです。これにより Atom および RSS の titledescriptionsummary などの属性が共通の JSON プロパティにマッピングされるので、Atom フィードにも RSS フィードも統一的に利用できます。たとえば、JSON 形式の結果においては RSS 属性 description が JSON プロパティ content として返され、Atom も同様になります。同様に、RSS 要素 pubDate が JSON プロパティ publishedDate として返され、結果は Atom フィードと同様になります。標準の RSS、Atom 要素を利用したいだけで、フィード形式の違いに煩わされたくないのであれば、JSON 形式の結果を使うと便利です。詳しくは、下記の JSON 形式の例または JSON 結果形式の仕様をご覧ください。

setResultFormat により XML 結果形式を指定すると、AJAX Feed API は JSON 結果形式ではなくフィードの完全な XML を返します。XML ドキュメントには、ブラウザに組み込まれている標準的な XML DOM 関数によってアクセスできます。JSON ではなく DOM 関数を使用する場合、または digg:diggCount などフィード内の拡張要素を使用する必要がある場合は、XML 結果形式が便利です。詳しくは、このページの XML 形式の例または XML 結果形式の仕様をご覧ください。

また、JSON プロパティと XML ドキュメントの両方を使用して、標準属性のメリットを活用しながら XML 拡張要素を利用することもできます。このページの XML/JSON の混合の例をご覧ください。これは、JSON 属性を使用してフィードのすべてのエントリにアクセスし、さらに XML DOM を使用してフィード内の独自の Digg digg:diggVotes 要素を取得する例です。

API のアップデート

google.load の 2 番目の引数は、使用している AJAX Feed API の「バージョン」です。現在の AJAX Feed API はバージョン 1 ですが、今後新しいバージョンが提供される可能性があります。

今後 API に重大なアップデートを行う場合は、バージョン番号を変更して Google CodeAJAX API ブログでお知らせします。この場合には、ユーザーがコードを移行できるようにするため、最低 1 か月間は両方のバージョンをサポートします。

AJAX Feed API チームは、API を定期的にアップデートして最新のバグ修正やパフォーマンス改善を適用しています。これにより、パフォーマンスの向上とバグの修正が行われますが、API クライアントの一部に思わぬ障害が生じる恐れがあります。このような問題が発生した場合は、AJAX API ヘルプグループでご報告ください。

基本

この例では、単一のフィードをダウンロードして各エントリのタイトルを表示します。

var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
feed.load(function(result) {
  if (!result.error) {
    var container = document.getElementById("feed");
    for (var i = 0; i < result.feed.entries.length; i++) {
      var entry = result.feed.entries[i];
      var div = document.createElement("div");
      div.appendChild(document.createTextNode(entry.title));
      container.appendChild(div);
    }
  }
});

例を表示(helloworld.html)

JSON 形式の結果

この例は、上の単純な例と似ていますが、ここでは AJAX Feed API で標準化されたほとんどの JSON プロパティが表示されます。詳しくは、JSON 結果形式の仕様をご覧ください。

var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
feed.load(function(result) {
  if (!result.error) {
    var container = document.getElementById("feed");
    for (var i = 0; i < result.feed.entries.length; i++) {
      var entry = result.feed.entries[i];
      var attributes = ["title", "link", "publishedDate", "contentSnippet"];
      for (var j = 0; j < attributes.length; j++) {
        var div = document.createElement("div");
        div.appendChild(document.createTextNode(entry[attributes[j]]));
        container.appendChild(div);
      }
    }
  }
});

例を表示(json.html)

XML 形式の結果

次の例は、AJAX Feed API によって JSON 結果形式ではなく XML DOM を使用して RSS および Atom フィードにアクセスする方法を示しています。2 種類のフィードへのアクセスの違いは、RSS の例では item などの RSS 要素を使用し、Atom の例では entry などの Atom 要素を使用している点です。

最初の例では、XML DOM から RSS フィードに直接アクセスしています。この例では、AJAX FEED API に含まれる getElementsByTagNameNS を活用して Digg フィードの diggCount 拡張要素にアクセスすることにより、出力されるタイトルの横に投票数を表示させています。

var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
feed.load(function(result) {
  var container = document.getElementById("feed");
  if (!result.error) {
    var items = result.xmlDocument.getElementsByTagName("item");
    for (var i = 0; i < items.length; i++) {
      var titleElement = items[i].getElementsByTagName("title")[0];
      var title = titleElement.firstChild.nodeValue;

      var votesElement = google.feeds.getElementsByTagNameNS(items[i], "http://digg.com/docs/diggrss/", "diggCount")[0];
      var votes = votesElement.firstChild.nodeValue;

      var div = document.createElement("div");
      div.appendChild(document.createTextNode(title + " (" + votes + " votes)"));
      container.appendChild(div);
    }
  }
});

例を表示(xml.html)

2 番目の例では、XML DOM から Atom フィードに直接アクセスしています。この例では、AJAX FEED API に含まれる getElementsByTagNameNS を活用して、Google Base フィードの要素にアクセスしています。

var feed = new google.feeds.Feed("http://www.google.com/base/feeds/snippets");
feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
feed.load(function(result) {
  var container = document.getElementById("feed");
  if (!result.error) {
    var entries = google.feeds.getElementsByTagNameNS(result.xmlDocument, "http://www.w3.org/2005/Atom", "entry");
    for (var i = 0; i < entries.length; i++) {
      var titleElement = google.feeds.getElementsByTagNameNS(entries[i], "http://www.w3.org/2005/Atom", "title")[0];
      var title = titleElement.firstChild.nodeValue;

      var priceElement = google.feeds.getElementsByTagNameNS(entries[i], "http://base.google.com/ns/1.0", "price")[0];
      var price = priceElement.firstChild.nodeValue;

      var div = document.createElement("div");
      div.appendChild(document.createTextNode(title + " (" + price + ")"));
      container.appendChild(div);
    }
  }
});

例を表示(atomxml.html)

JSON と XML の混合形式

この例は、上の XML の例での出力を再現しながら、JSON 結果形式の使用と XML DOM へのアクセスを組み合わせたものです。ここでは、AJAX Feed API から返される JSON データ構造を使用してフィード内のすべての要素を反復し、さらに各 JSON 結果に特別な xmlNode ポインタを使用して、そのエントリに対応する XML DOM 内の要素にアクセスしています。その XML 要素と getElementsByTagNameNS を使用して diggCount 拡張要素にアクセスし、これによって Digg のコンテンツに対する投票数にアクセスしています。

var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);
feed.load(function(result) {
  if (!result.error) {
    var container = document.getElementById("feed");
    for (var i = 0; i < result.feed.entries.length; i++) {
      var entry = result.feed.entries[i];
      var votesElement = google.feeds.getElementsByTagNameNS(entry.xmlNode, "http://digg.com/docs/diggrss/", "diggCount")[0];
      var votes = votesElement.firstChild.nodeValue;

      var div = document.createElement("div");
      div.appendChild(document.createTextNode(entry.title + " (" + votes + "votes)"));
      container.appendChild(div);
    }
  }
});

例を表示(jsonxml.html)

FeedControlNew!

この例では、高位レベルの google.feeds.FeedControl クラスを使用して、フィードのコレクションを表示します。このクラスは、AJAX Search API の検索コントロール層 GSearchControl と類似しています。この例では、FeedControl クラスを作成し、クラスに 2 つのフィードを追加してからフィード管理に描画を指示します。

<html>
  <head>
    <script  type="text/javascript" src="http://www.google.com/jsapi?key="YOUR-KEY"></script>
    <script type="text/javascript">

      google.load("feeds", "1");

      function initialize() {
        var feedControl = new google.feeds.FeedControl();
        feedControl.addFeed("http://www.digg.com/rss/index.xml", "Digg");
        feedControl.addFeed("http://feeds.feedburner.com/Techcrunch", "TechCrunch");
        feedControl.draw(document.getElementById("feedControl"));
      }
      google.setOnLoadCallback(initialize);

    </script>
  </head>

  <body>
    <div id="feedControl">Loading</div>
  </body>
</html>

例を表示(feedcontrol.html)

フィードの探索New!

次の 2 つの例は、グローバル メソッドである google.feeds.findFeedsgoogle.feeds.lookupFeed を使用して、検索キーワードに基づいてフィードを探索し、標準のウェブページに関連するフィードを検索するものです。

最初の例では google.feeds.findFeeds を使用して、検索キーワードに基づき FeedControl を動的に生成します。

<html>
  <head>
    <script  type="text/javascript" src="http://www.google.com/jsapi?key="YOUR-KEY"></script>
    <script type="text/javascript">

      google.load("feeds", "1");

      var defaultQuery = 'Official Google Blogs';

      function findFeeds(query) {
        google.feeds.findFeeds(query, feedSearchDone);
      }

      function feedSearchDone(result) {
        var el = document.getElementById('feedControl');

        if (result.error || result.entries.length <= 0) {
          el.innerHTML = 'No Results Found';
          return;
        }

        // Create a feed control
        var feedControl = new google.feeds.FeedControl();

        // Grab top 4..
        for (var i = 0; i < 4; i++) {
          feedControl.addFeed(result.entries[i].url, result.entries[i].title);
        }

        feedControl.setLinkTarget(google.feeds.LINK_TARGET_BLANK);
        feedControl.setNumEntries(2);
        feedControl.draw(el);
      }

      google.setOnLoadCallback(function() {findFeeds(defaultQuery)});

    </script>
  </head>

  <body>
    <div id="feedControl">Loading</div>
  </body>
</html>

例を表示(findfeeds.html)

2 番目の例では google.feeds.lookupFeed を使用し、一定のユーザーに公開された Flickr ウェブページに関連するフィードを取得して、動的にスライドショーを生成します。

<html>
  <head>
    <script  type="text/javascript" src="http://www.google.com/jsapi?key="YOUR-KEY"></script>
    <script type="text/javascript">

      google.load("feeds", "1");

      var defaultUser = 'dlc0421';

      function newSlideShow(user) {
        showStatus('Resolving feed for ' + user);
        var url = 'http://www.flickr.com/photos/' + user;
        google.feeds.lookupFeed(url, lookupDone);
      }

      function lookupDone(result) {
        if (result.error || result.url == null) {
        showStatus('Could not locate feed for user');
        return;
        }

        showStatus('Found Photo Feed');
        // We need to switch over from Atom to RSS to get Yahoo Media for slideshow..
        var url = result.url.replace('format=atom', 'format=rss_200');
        showSlideShow(url);
      }

      function showSlideShow(url) {
        var options = {
          displayTime: 2500,
          transistionTime: 800,
          scaleImages: true,
          thumbnailTag: 'content',
          linkTarget : google.feeds.LINK_TARGET_BLANK
        };
        new GFslideShow(url, "slideshow", options);
      }

      google.setOnLoadCallback(function() {newSlideShow(defaultUser)});

    </script>
  </head>

  <body>
    <div id="feedControl">Loading</div>
  </body>
</html>

例を表示(lookup.html)

API の詳細

サポートされるフィード形式

Google AJAX FEED API でサポートされるフィード形式は、次のとおりです。

フィードの探索New!

Google AJAX Feed API にはグローバル メソッド google.feeds.findFeedsgoogle.feeds.lookupFeed が追加されました。これを使用して、関連のフィードを検索したり、HTML ベースの URL に関連するフィードを探したりすることができます。

フィードのクロール方法

Google AJAX Feed API は Feedfetcher によってフィードをクロールします。これは、Google リーダーiGoogle でも使用されています。Feedfetcher について詳しくは、ウェブマスター向けヘルプ センターをご覧ください。

フィードのクロール頻度

AJAX Feed API は Feedfetcher を使用しているため、API から提供されるフィードのデータが最新ではない場合もあります。Google のフィード クローラ (Feedfetcher) がフィードを取得する頻度は、ほとんどのサイトでは 1 時間に 1 回を超えることはありません。一部の頻繁にアップデートされるサイトに対しては、更新の頻度が高くなります。

クロスブラウザ XML アクセス

Microsoft Internet Explorer は DOM Level 2 をサポートしていません。従って、getElementsByTagNameNS のような名前空間関連の DOM 関数をサポートしていません。Google AJAX Feed API は、フィードを使用するサイトに共通する必要条件であるため、getElementsByTagNameNS というクロスブラウザ実装が含まれます。現時点で、API にはその他の DOM Level 2 メソッドの実装は含まれていません。

Flash やその他 JavaScript を使用しない環境New!

Flash のデベロッパーや、JavaScript を使用しない環境で AJAX Feed API にアクセスする必要のあるデベロッパーに対して、API ではシンプルな RESTful インターフェースを公開しています。どの場合でも、サポートされるメソッドは GET で、応答の形式は、ステータスコードが埋め込まれた JSON エンコードされた結果です。このインターフェースを使用するアプリケーションは、既存のすべての利用規約に従うものとします。特に注意する必要があるのは、要求において自身を正しく識別することに関連する部分です。アプリケーションでは、有効かつ正確な HTTP referer ヘッダーを常に要求に含める必要があります。さらに、必須ではありませんが、それぞれの要求に有効な API キーを組み込んでください。キーを提供することで、アプリケーションにより二次的な識別構造が提供され、問題が発生した場合のコンタクトに使用できます。

このインターフェースについて簡単に学ぶ方法は、使用してみることです。コマンド ライン ツール curlwget を使って次のコマンドを実行してください。

curl -e http://www.my-ajax-site.com \
        'http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml&v=1.0'

このコマンドは、Digg.com フィード (q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml) に対してフィードのロード (/ajax/services/feed/load) を実行します。応答には text/javascript; charset=utf-8Content-Type が含まれます。次に示す応答を見ると、responseDataJSON Result Format のドキュメントと一致することがわかります。前のセクションで説明されている各種のアクセス メソッドを REST API を介して使用可能にする方法の詳細については、このベース URL に対するテーブル マッピング メソッドを参照してください。

{"responseData": {
 "feed": {
  "title": "Digg",
  "link": "http://digg.com/",
  "author": "",
  "description": "Digg",
  "type": "rss20",
  "entries": [
   {
    "title": "The Pirate Bay Moves Servers to Egypt Due to Copyright Laws",
    "link": "http://digg.com/tech_news/The_Pirate_Bay_Moves_Servers_to_Egypt_Due_to_Copyright_Laws",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 23:13:33 -0700",
    "contentSnippet": "Due to the new copyright legislation that are going ...",
    "content": "Due to the new copyright legislation that are going to take...",
    "categories": [
    ]
   },
   {
    "title": "Millions Dead/Dying in Recent Mass-Rick-Rolling by YouTube.",
    "link": "http://digg.com/comedy/Millions_Dead_Dying_in_Recent_Mass_Rick_Rolling_by_YouTube",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 22:53:30 -0700",
    "contentSnippet": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "content": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "categories": [
    ]
   },
   ...
  ]
 }
}
, "responseDetails": null, "responseStatus": 200}

この応答形式に加えて、このプロトコルは、callback 引数を指定して呼び出される従来の JSON-P 形式のコールバックもサポートします。この引数がある場合、JSON オブジェクトは指定されたコールバックに引数として渡されます。

curl -e http://www.my-ajax-site.com \
        'http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml&v=1.0&callback=foo'

このコマンドはフィードのロードを実行し、前のロードと同じですが、callback を渡すように変更されています。この引数を使用すると、JSON オブジェクトが返される代わりに JavaScript 呼び出しが返され、JSON オブジェクトは results パラメータを介して渡されます。

foo({"responseData": {
 "feed": {
  "title": "Digg",
  "link": "http://digg.com/",
  "author": "",
  "description": "Digg",
  "type": "rss20",
  "entries": [
   {
    "title": "The Pirate Bay Moves Servers to Egypt Due to Copyright Laws",
    "link": "http://digg.com/tech_news/The_Pirate_Bay_Moves_Servers_to_Egypt_Due_to_Copyright_Laws",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 23:13:33 -0700",
    "contentSnippet": "Due to the new copyright legislation that are going ...",
    "content": "Due to the new copyright legislation that are going to take...",
    "categories": [
    ]
   },
   {
    "title": "Millions Dead/Dying in Recent Mass-Rick-Rolling by YouTube.",
    "link": "http://digg.com/comedy/Millions_Dead_Dying_in_Recent_Mass_Rick_Rolling_by_YouTube",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 22:53:30 -0700",
    "contentSnippet": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "content": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "categories": [
    ]
   },
   ...
  ]
 }
}
, "responseDetails": null, "responseStatus": 200})

最終的に、プロトコルは callback 引数と context 引数をサポートします。この URL の引数が指定されると、応答は callback(context, feed, status, details, unused) の署名で JavaScript を直接呼び出すようエンコードされます。次のコマンドと応答に、微妙な違いがあることに注意してください。

curl -e http://www.my-ajax-site.com \
 'http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.digg.com%2Frss%2Findex.xml&v=1.0&callback=foo&context=bar'

このコマンドはフィードのロードを実行し、前のロードと同じですが、callbackcontext を渡すように変更されています。この引数を使用すると、JSON オブジェクトが返される代わりに JavaScript 呼び出しが返され、JSON オブジェクトは feed パラメータを介して渡されます。

foo('bar', {
 "feed": {
  "title": "Digg",
  "link": "http://digg.com/",
  "author": "",
  "description": "Digg",
  "type": "rss20",
  "entries": [
   {
    "title": "The Pirate Bay Moves Servers to Egypt Due to Copyright Laws",
    "link": "http://digg.com/tech_news/The_Pirate_Bay_Moves_Servers_to_Egypt_Due_to_Copyright_Laws",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 23:13:33 -0700",
    "contentSnippet": "Due to the new copyright legislation that are going ...",
    "content": "Due to the new copyright legislation that are going to take...",
    "categories": [
    ]
   },
   {
    "title": "Millions Dead/Dying in Recent Mass-Rick-Rolling by YouTube.",
    "link": "http://digg.com/comedy/Millions_Dead_Dying_in_Recent_Mass_Rick_Rolling_by_YouTube",
    "author": "",
    "publishedDate": "Mon, 31 Mar 2008 22:53:30 -0700",
    "contentSnippet": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "content": "Click on any \u0022Featured Videos\u0022. When will the insanity stop?",
    "categories": [
    ]
   },
   ...
  ]
 }
}
, 200, null)

コード スニペットNew!

AJAX Search API ドキュメントには、Flash、Java、PHP からサービスへのアクセスを例示するいくつかのコード スニペットが含まれます。この中の言語固有の部分は、AJAX API 全体で同じなので、スニペットを繰り返す代わりに、リンクを参照してください。

このインターフェースについて網羅したドキュメントは、クラス リファレンス マニュアルをご覧ください。

セキュリティの注意

JavaScript では Same-Origin Policy (SOP) を使用して、悪意のあるスクリプトがユーザーの個人データにアクセスしないように保護しています。Security for GWT Applications の記事では、このポリシーとその他の JavaScript のセキュリティ問題について、詳しく説明しています。

AJAX Feed API は、要求されたフィードのホスト (digg.com など) に個人情報を一切送信しません。Google のクローラである Feedfetcher はフィードを匿名でダウンロードし、AJAX Feed API が作成したすべての要求に関して、Google のサーバーがそのフィードのキャッシュとしての役割を果たします。AJAX Feed API は、公開されているフィードに対するアクセスのみを提供します。

トラブルシューティング

コードについて問題が発生した場合は、次のことを実行してください。

  • ご使用の API キーが有効であることを確認します。
  • ミスタイプがないかどうかを確認します。JavaScript では大文字と小文字が区別されるため、正しく記述されていることを確認します。
  • JavaScript デバッガを使用します。Firefox の場合は、JavaScript コンソールまたは FireBug アドオン、IE の場合は Microsoft Script Debugger を使用できます。
  • AJAX API ヘルプグループを検索します。疑問に対する答えが投稿されていない場合は、問題を具体的に示しているウェブ ページへのリンクを含めて、グループに質問を投稿してください。