2014年4月13日 星期日

GData APIs ( Google Data APIs ) - Blogger

現在大部分的部落格都已經開放 API 讓開發人員能使用 API 對部落格做 CRUD 的動作,痞克邦、隨意窩、Blogger,甚至包括之前關站的無名小站皆有提供,接下來就開始使用 C# 來撰寫使用 Blogger 的程式。

有許多人都使用 webBrowser 來模擬瀏覽器的動作發布文章,但是 blogger 無法讓你這樣做,你可以試試看,保證你抓不到 tag。

未下載 GData APIs 且未安裝請參考:GData APIs ( Google Data APIs ) 介紹與安裝

引用參考

使用 Google.GData.Client.dll 。
using Google.GData.Client;

建立 Service

username 為帳號 ( Email ),password 為密碼,若帳號有設置兩步驗證的話,請到 應用程式專用密碼 去取得一組密碼,要不然原本帳號密碼是無法使用。
service = new Service("blogger", "blogger-example");
service.Credentials = new GDataCredentials(username, password);

取得文章列表

max-results 為參數,讓回傳的文章數最大為 500 篇。
/* 列出使用者的部落格 */
public Dictionary<string, Uri> GetListUserBlogs()
{
    Dictionary<string, Uri> dicBlogs = new Dictionary<string,Uri>();

    FeedQuery query = new FeedQuery();
    query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
    AtomFeed feed = service.Query(query);

    // 發佈文章
    Uri blogPostUri = null;


    if (feed != null)
    {
        foreach (AtomEntry entry in feed.Entries)
        {
            
            for (int i = 0; i < entry.Links.Count; i++)
            {
                if (entry.Links[i].Rel.Equals("http://schemas.google.com/g/2005#post"))
                {
                    blogPostUri = new Uri(entry.Links[i].HRef.ToString() + "?max-results=500");
                    dicBlogs.Add(entry.Title.Text, blogPostUri);
                    
                }
            }
            // return blogPostUri;
            
        }
    }
    return dicBlogs;
}

新增文章

其中 tags 變數為逗點分隔的字串,isDraft 為是否為草稿。
/* 建立新文章且將它送到 blogPostUri */
public AtomEntry CreatePost(Uri blogPostUri, string title, string content, string tags, DateTime dt, bool isDraft)
{
    AtomEntry createdEntry = null;
    if (blogPostUri != null)
    {
        // construct the new entry
        AtomEntry newPost = new AtomEntry();
        newPost.Title.Text = title;
        newPost.Content = new AtomContent();
        newPost.Content.Content = content;

        foreach (string term in tags.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
            newPost.Categories.Add(new AtomCategory(term, new AtomUri("http://www.blogger.com/atom/ns#")));

        newPost.Published = dt;
        newPost.IsDraft = isDraft;

        createdEntry = service.Insert(blogPostUri, newPost);
        if (createdEntry != null)
        {
            Console.WriteLine("  New blog post created with title: " + createdEntry.Title.Text);
        }
    }
    return createdEntry;
}

更新文章


/* 編輯文章 */
public void EditEntry(AtomEntry toEdit)
{
    if (toEdit != null)
    {
        // toEdit.Title.Text = "Marriage Woes!";
        toEdit = toEdit.Update();
    }
}

刪除文章


/* 刪除文章 */
public void DeleteEntry(AtomEntry toDelete)
{
    if (toDelete != null)
    {
        toDelete.Delete();
    }
}

實作

我用以上幾個函式寫了一個視窗程式,下圖為成品




沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...