UWP:はてなブックマークアプリを作るときのメモ

執筆日時:

f:id:daruyanagi:20160402055718p:plain

ググったら自分のブログが出てきて白目。

フォトライフの記事だったが、これをブックマーク向けにちょろっと編集するだけで動いた。ただし、

といった手直しをする必要があったけれど。

たとえば、ブックマークの編集はこんな感じ

private const string API_ENDPOINT = "http://b.hatena.ne.jp/atom/";
private const string API_POST_URL = API_ENDPOINT + "post";
private const string API_EDIT_URL = API_ENDPOINT + "edit";
private const string USER_AGENT = "Hateboo";
private const string XML_ACCEPT_TYPE =
"application/x.atom+xml, application/xml, text/xml, */*";
private const string XML_CONTENT_TYPE = "application/x.atom+xml";
private const string XML_PAYLOAD
= "<entry xmlns=\"http://purl.org/atom/ns#\">"
+ "<title>{0}</title>"
+ "<link rel=\"related\" type=\"text/html\" href=\"{1}\" />"
+ "<summary type=\"text/plain\">{2}</summary>"
+ "</entry>";

public async Task<PersonalBookmark> UpdatePersonalBookmarkAsync(string url, string title, string comment) { var endpoint = API_EDIT_URL + "?url=" + WebUtility.UrlEncode(url); var body = string.Format(XML_PAYLOAD, title, url, comment);

var request = new HttpRequestMessage(HttpMethod.Put, endpoint); request.Headers.Add("X-WSSE", GenerateWsseHeader()); request.Headers.Add("ContentType", XML_CONTENT_TYPE); request.Headers.Add("User-Agent", USER_AGENT); //! request.Content = new StringContent( body, Encoding.UTF8, XML_CONTENT_TYPE);

using (var client = new HttpClient()) { client.DefaultRequestHeaders.ExpectContinue = false; //!

try { var response = await client.SendAsync(request); var content = await response.Content.ReadAsStringAsync(); var entry = await GetPersonalBookmarkAsync(url);

return entry; // XML をクラスにデシリアライズしてポイ } catch { return new PersonalBookmark(); // 空インスタンスをポイ } } }

ほんとは WSSE ではなく OAuth+WebAuthenticator を使いたかったのだけど、うまく動かせなかったのでそれはまた今度。