顯示具有 GData APIs 標籤的文章。 顯示所有文章
顯示具有 GData APIs 標籤的文章。 顯示所有文章

2014年4月21日 星期一

GData APIs ( Google Data APIs ) - Calendar

個人通常記錄未來工作事項都是習慣使用紙本記錄,因為好處是隨身、任意塗改、做不止文字的記錄,但我相信還是有更多的人較喜歡使用 Google 日曆,除了可以記錄工作事項外,且可將事項分類、重要性、附檔、結合 Gmail....等好處多多 ( 請參閱: Google日曆 最佳化:在忙碌瑣事中有效率掌握最重要行程)。

此篇文章只提供重要程式碼,去使用 C# Windows Form 來建置一個視窗程式與 Google 日曆互動。

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

引用參考

using Google.GData.Calendar;
using Google.GData.Client;
using Google.GData.Extensions;

建立 CalendarService

service = new CalendarService(projectid);
service.setUserCredentials(username, password);

若無 projectid,請到 Google Developers Console 申請。

取得 使用者 所有日曆

public void GetUserCalendars()
{
    FeedQuery query = new FeedQuery();
    query.Uri = new Uri("http://www.google.com/calendar/feeds/default");

    AtomFeed calFeed = service.Query(query);

    for (int i = 0; i < calFeed.Entries.Count; i++)
    {
        // Console.WriteLine(calFeed.Entries[i].Title.Text);
        // do something ...
    }
}

取得所有日曆事件

public AtomEntryCollection GetAllEvents()
{
    EventQuery myQuery = new EventQuery(calendarURI);
    EventFeed myResultsFeed = service.Query(myQuery) as EventFeed;

    entries = myResultsFeed.Entries;

    return entries;
}
calendarURI 為 https://www.google.com/calendar/feeds/default/private/full。

取得日曆 日期區間 事件

public AtomEntryCollection GetDateRangeEvents(DateTime startTime, DateTime endTime)
{
    EventQuery myQuery = new EventQuery(calendarURI);
    myQuery.StartTime = startTime;
    myQuery.EndTime = endTime;

    EventFeed myResultsFeed = service.Query(myQuery) as EventFeed;

    entries = myResultsFeed.Entries;

    return entries;
}

建立事件

public void CreateEvent(string title, string content, DateTime dtStart, DateTime dtEnd)
{
    EventEntry entry = new EventEntry();

    entry.Title.Text = title;
    entry.Content.Content = content;

    When eventTime = new When(dtStart, dtEnd);
    entry.Times.Add(eventTime);

    Uri postUri = new Uri(calendarURI);

    AtomEntry insertedEntry = service.Insert(postUri, entry);

}

更新事件

public void UpdateEvent(EventEntry entry)
{
    Uri postUri = new Uri(calendarURI);

    AtomEntry insertedEntry = service.Update(entry);

}

實作

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




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();
    }
}

實作

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




2014年4月10日 星期四

GData APIs ( Google Data APIs ) 介紹與安裝

GData 是一種簡單的標準協議,用於網路資料的讀寫。它結合了常見的基於 xml 的數據聚合格式( Atom 與 RSS)以及基於 Atom 發布協議的 Feed 發布體系,並擴展了部分功能用於處理查詢功能。有時,我們需要發送一個查詢請求給服務器,並得到服務器返回的相符的查詢結果,而目前的 Atom 和 RSS 標準都不具備這一功能。GData 讓使用者可以使用聚合 ( syndication ) 的機制來發送請求並接收結果,它使你可以發送數據給 Google,更新那些 Google 已經擁有的資料。

GData 擴展了原有的 RSS 和 Atom 協議,使其從一種單向的聚合變成了雙向的互動,這似乎是大家都在探索的 feed 的未來發展方向,比如微軟的 SSE。

Joe Gregorio 認為,GData 是將RSS、Atom,尤其是 Atom 發布協議 ( Atom Publishing Protocol )與 Amazon 的 Openserch 標準相結合;Maurice Codik 認為 GData 標準使 Google 的數據更加開放,各種應用之間可以更方便地利用這一標準來使用數據;甚至有人認為這使得基於 Google 各種應用的企業門戶雛形開始顯現。

引用:什么是GData(Google Data API)

安裝

首先到 google-gdata 下載並安裝,安裝後路徑在 「 C:\Program Files (x86)\Google\Google Data API SDK\Redist 」,可以找到所有的 dll,往後可以找此路徑下的 dll 引用,而 「 C:\Program Files (x86)\Google\Google Data API SDK\Documentation\Google.GData.Documentation.chm 」 就是使用文件檔。


此篇文章只是稍微介紹與安裝 GData APIs,往後會有系列文章介紹如何使用 dll。