ページ

ラベル Blogger の投稿を表示しています。 すべての投稿を表示
ラベル Blogger の投稿を表示しています。 すべての投稿を表示

2013年7月31日水曜日

Google API を使って自動的に記事を投稿する サンプルサイト

Google API を使って自動的に記事を投稿する サンプルサイト

今月は、Google API を使ってBloggerに投稿するプログラムについて勉強しました。
集大成として、サンプルサイトを作成しました。

http://p-mans.blogspot.jp/


サイト構築の要領

  • 専用のBloggerアカウントを用意
  • Azure仮想デスクトップを用意
  • 特定のサイトから過去記事を検索するロボットを作成
  • このロボットを複数用意して、タイムスケジューラーで定期的に起動
  • タイムスケジューラーはAzureの環境に用意
  • ロボットは記事の日付、タイトルを認識、不要なタグの削除などを行い、特定のbloggerへ自動投稿する

問題点

bloggerへの自動投稿には以下の問題点があります。
  • 1日に投稿出来る件数の制限
  • 利用できるタグの制限

総評

問題点が見えれば、回避方法が見つかりますので、なんとか構築に成功しました。
この構築に掛かった工数は試行錯誤もあるので、約10人日でした。
今回は仕事に関係するパチンコ業界の記事を中心にしたサイトを作ってみました。



2013年7月29日月曜日

Google API で Bloggerに投稿する際に、ラベル、スケジュール日付を付加する。

Google API で Bloggerに投稿する際に、ラベル、スケジュール日付を付加する。
Google.GData.Clientを参照する。
using Google.GData.Client;
以下がサンプルコード。

schemeに"http://www.blogger.com/atom/ns#" を指定するのが重要なポイントになります。

static AtomEntry PostNewEntry(Service service, Uri blogPostUri
 , string Title, string HtmlContent, DateTime Update
 , string Name, string Email)
{
    Console.WriteLine("\nPublishing a blog post");
    AtomEntry createdEntry = null;
    if (blogPostUri != null)
    {
        // construct the new entry
        AtomEntry newPost = new AtomEntry();
        newPost.Title.Text = Title; //タイトルはダブってもエラーにならない
        newPost.Published = Update;   //日付
        newPost.Content = new AtomContent();
        newPost.Content.Content = HtmlContent;
        newPost.Content.Type = "xhtml";
        newPost.Authors.Add(new AtomPerson());
        newPost.Authors[0].Name = Name;
        newPost.Authors[0].Email = Email;
        newPost.Categories.Add(new AtomCategory(
            "Label1"   //term
            , "http://www.blogger.com/atom/ns#" //scheme
            ));
        try
        {
            createdEntry = service.Insert(blogPostUri, newPost);
            if (createdEntry != null)
            {
                Console.WriteLine("New blog post created);
            }
        }
        catch
        {
        }
    }
    return createdEntry;
}


Service.Insert()でエラーが発生する場合は、HTMLのタグに不整合がないか確認してみよう。

Service.Insertのエラーについて

Service.Insertで発生するエラーについてはいくつか考えられる。

  1. HTMLのタグに不整合
  2. 投稿件数オーバー・セキュリティーロック

HTMLのタグに不整合

いつか使えないタグ、というか古い仕様は受け付けない。
例えば<br>は×、</ br>出ないとだめ。
その他にも対応しないタグが有るようです。

投稿件数オーバー・セキュリティーロック

1日の投稿件数が、ある一定数(?)を超えると、セキュリティーロックが掛かる。
ハッカーが他人のブログをのっとって、ロボットが書き込んでいると判断されるようだ。
手動での各込は出来るが、投稿時にセキュリティ画像に表示される文字の入力が必要になる。
APIではそれが困難である為、エラーが発生する。
セキュリティーロックは翌日になると、解除されるようだが、セキュリティーロックが掛かった日はAPI投稿は中断し、一日に投稿する数を調整する必要がある。
ある一定数(?)というのが分からないが、100投稿もすればセキュリティーロックが掛かるのも当然だと言える。