2014/10/19

C# Bing Webmaster APIを使ってサイトマップを再送信するサンプル

つい先日、Bing WebmasterがAPIを公開していることに気が付きました。
C#の勉強の一環として、Bing Webmaster APIを使ってサイトマップを再送信するプログラムを書いてみました。
分かるまで結構時間がかかるものですね・・・

背景

私が利用しているGoogleのブログ サービス「Blogger」のサイトマップ(ATOM形式)をBing Webmasterに登録していますが、なぜか定期的な更新が行われません。
今まで手作業で更新していましたが、案の定忘れる訳ですよ、更新を。
せっかくAPIが公開されているのであれば、何らかの手段を用いて自動的にサイトマップを再送信したいなぁと思い、今回の記事を書いた次第です。

手順

Web APIを使ったプログラムを書いたことがない、またC#でプログラムを書いた経験がありません。
これから説明する手順には、Visual Studio 2013 の操作方法も併せています。分かる方はすっ飛ばしてください。
Bing Webmaster APIのサンプルを書くにあたって
を参考にしました。サンプルがあるって便利ですね!
  1. Bing Webmaster からAPI キーを取得
    image
  2. Visual Studio 2013を起動
  3. [ファイル]→[新規作成]→[プロジェクト]をクリック
    image
  4. [Visual C#]の[コンソール アプリケーション]を選択、適当なプロジェクト名を入力する
    image
  5. Web APIを参照するため、[ソリューション エクスプローラー]→[参照設定]を選択し右クリック、[サービス参照の追加]をクリック
    image
  6. Bing Webmaster APIのURLを[アドレス]欄に入力、[移動]ボタンをクリック
    https://ssl.bing.com/webmaster/api.svc
    ※URLはwww.bing.comでも大丈夫でした
    image
  7. APIの一覧?が取得出来たら、名前空間に適当な名前を入力
    今回はmsdnのサンプルと同じ WebmasterApi とします
  8. [ソリューション エクスプローラー]の[App.Config]を選択
    image
  9. App.Configの修正、及び追記を行います。
    • system.serviceModel->client->endpoint 要素のaddress属性値にある文字「API_KEY」をBing Webmaster API キーを置き換えます。
      image
    • 受信メッセージサイズを指定
      system.serviceModel->bindings->basicHttpBinding->binding 要素に二つの属性を追加します。数値は524288、又はそれ以上
      image
      1. maxBufferPoolSize=”524288”
      2. maxReceiveMessageSize=”524288”
  10. Program.csにサンプルを書く

サンプル

namespace Bing_Webmaster_Feed_Submitter
{
    using System;
    using System.Linq;
    using System.ServiceModel;

    class Program
    {
        //Bing Webmasterに登録している自分のサイト
        private static readonly string BING_ENTRY_URL = "http://xxxxxxx.blogspot.jp/";
        
        static void Main(string[] args)
        {
            //サービス参照のインスタンスを生成
            var api = new WebmasterApi.WebmasterApiClient();
            
            try
            {
                //登録済みサイトマップを取得
                var feeds = api.GetFeeds(BING_ENTRY_URL);
                foreach (var value in feeds)
                {
                    //サイトマップを再送信
                    api.SubmitFeed(BING_ENTRY_URL, value.Url);
                }
            }
            catch (FaultException fault)
            {
                Console.WriteLine("Failed: {0}", fault.Message);
            }
        }
    }
}

たったこれだけでBing Webmasterに登録しているサイトマップを再送信することができました。
当初、system.runtime.serialization.json など参照設定を追加しスクラッチで開発する必要があるとのかなぁと思っていましたが、VSの[サービス参照](機能といっていいのかな?)を使う事で簡単にWeb APIを操作できました。
なお、サイトマップが更新されているかどうかの判定機能などを盛り込めばいいと思いますが、今回は説明致しません。
余談:Visual Studio Online、便利!
Visual Studioはあまり使わない=VSの良さを体感できていません。
しかし、今回使ってみてほんの少し良さが分かった気がします。
特に、Visual Studio Onlineとの連携(チェックイン・チェックアウト機能)は非常に便利だなぁと。
ある程度書いてコンパイルが通ればチェックインし、変更内容をVisual Studio Onlineと同期。
後日メインの開発環境以外からもチェックインした時の内容が触れるわけですから、クラウド サービス万歳!です。
一人で必要なツールを作るだけならVisual Studio Onlineは無料ですからね、非常にありがたいと感じる今日この頃です。
スポンサーリンク

スポンサーリンク