• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

http://sourceforge.jp/projects/futonwriter/の旧リポジトリ


Commit MetaInfo

Revision802591ffe47a4a82687c37924d485fcb2f47eb22 (tree)
Time2011-05-09 17:31:07
Authorazyobuzin <azyobuzin@user...>
Commiterazyobuzin

Log Message

・DateIdとかいうプロパティを追加
・記事をいじるメソッドを揃えた

Change Summary

Incremental Difference

--- a/HatenaDiaryClient/Models/Hatena/BlogEntry.cs
+++ b/HatenaDiaryClient/Models/Hatena/BlogEntry.cs
@@ -2,6 +2,7 @@
22 using System.Collections.Generic;
33 using System.Linq;
44 using System.Text;
5+using System.Text.RegularExpressions;
56 using System.Xml.Linq;
67
78 namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
@@ -13,20 +14,22 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
1314 public string Title { set; get; }
1415 public string Html { set; get; }
1516 public string HatenaSyntax { set; get; }
17+ public string DateId { set; get; }
1618
1719 public BlogEntry() { }
1820 public BlogEntry(XElement xml)
1921 {
20- Edited = DateTime.Parse(xml.Element(XmlNamespaces.AtomPub + "edited").Value);
21- BlogPage = xml.Elements(XmlNamespaces.Atom + "link")
22+ this.Edited = DateTime.Parse(xml.Element(XmlNamespaces.AtomPub + "edited").Value);
23+ this.BlogPage = xml.Elements(XmlNamespaces.Atom + "link")
2224 .Where(_ => _.Attribute("rel").Value == "alternate")
2325 .Select(_ => _.Attribute("href").Value)
2426 .FirstOrDefault();
25- Title = xml.Element(XmlNamespaces.Atom + "title").Value;
26- Html = xml.Element(XmlNamespaces.Atom + "content").Value;
27- HatenaSyntax = xml.Elements(XmlNamespaces.HatenaNs + "syntax")
27+ this.Title = xml.Element(XmlNamespaces.Atom + "title").Value;
28+ this.Html = xml.Element(XmlNamespaces.Atom + "content").Value;
29+ this.HatenaSyntax = xml.Elements(XmlNamespaces.HatenaNs + "syntax")
2830 .Select(_ => _.Value)
2931 .SingleOrDefault();
32+ this.DateId = Regex.Match(this.BlogPage, @"\d+/\d+$").ToString();
3033 }
3134 }
3235 }
--- a/HatenaDiaryClient/Models/Hatena/HatenaDiary.cs
+++ b/HatenaDiaryClient/Models/Hatena/HatenaDiary.cs
@@ -17,7 +17,7 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
1717 this.password = password;
1818 }
1919
20- public Tuple<string, IEnumerable<BlogEntry>> GetEntrys(int page)
20+ public Tuple<string, IEnumerable<BlogEntry>> GetEntrys(int page = 1)
2121 {
2222 var xdoc = WsseAtomConnection.Get(
2323 string.Format("http://d.hatena.ne.jp/{0}/atom/blog?page={1}", this.userName, page),
@@ -28,16 +28,21 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
2828 return Tuple.Create(title, entrys);
2929 }
3030
31- public BlogEntry PostEntry(string title, string content, DateTime? updated = null)
31+ private static XDocument CreatePostEntryXml(string title, string content, DateTime? updated)
3232 {
3333 var elm = new XElement(XmlNamespaces.Atom02Spec + "entry",
34- new XElement(XmlNamespaces.Atom02Spec + "title", title),
35- new XElement(XmlNamespaces.Atom02Spec + "content", new XAttribute("type", "text/plain"), content));
34+ new XElement(XmlNamespaces.Atom02Spec + "title", title),
35+ new XElement(XmlNamespaces.Atom02Spec + "content", new XAttribute("type", "text/plain"), content));
3636 if (updated.HasValue)
3737 elm.Add(new XElement(XmlNamespaces.Atom02Spec + "updated", updated.Value.ToString("o")));
38+ return new XDocument(elm);
39+ }
40+
41+ public BlogEntry PostEntry(string title, string content, DateTime? updated = null)
42+ {
3843 var reXml = WsseAtomConnection.Post(
3944 string.Format("http://d.hatena.ne.jp/{0}/atom/blog", this.userName),
40- new XDocument(elm),
45+ CreatePostEntryXml(title, content, updated),
4146 this.userName,
4247 this.password);
4348 return new BlogEntry(reXml.Root)
@@ -45,5 +50,35 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
4550 HatenaSyntax = content
4651 };
4752 }
53+
54+ public BlogEntry GetEntry(string dateId)
55+ {
56+ var xdoc = WsseAtomConnection.Get(
57+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
58+ this.userName,
59+ this.password);
60+ return new BlogEntry(xdoc.Root);
61+ }
62+
63+ public BlogEntry EditEntry(string dateId, string title, string content, DateTime? updated = null)
64+ {
65+ var reXml = WsseAtomConnection.Put(
66+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
67+ CreatePostEntryXml(title, content, updated),
68+ this.userName,
69+ this.password);
70+ return new BlogEntry(reXml.Root)
71+ {
72+ HatenaSyntax = content
73+ };
74+ }
75+
76+ public void DeleteEntry(string dateId)
77+ {
78+ WsseAtomConnection.Delete(
79+ string.Format("http://d.hatena.ne.jp/{0}/atom/blog/{1}", this.userName, dateId),
80+ this.userName,
81+ this.password);
82+ }
4883 }
4984 }
--- a/HatenaDiaryClient/Models/Hatena/WsseAtomConnection.cs
+++ b/HatenaDiaryClient/Models/Hatena/WsseAtomConnection.cs
@@ -49,7 +49,7 @@ namespace Azyobuzi.HatenaDiaryClient.Models.Hatena
4949 var req = WebRequest.Create(reqUri);
5050 req.Method = method;
5151 req.Headers.Add(CreateHeader(userName, password));
52- req.ContentType = "application/x.atom+xml";
52+ req.ContentType = "application/x.atom+xml; charset=utf-8";
5353 var bs = Encoding.UTF8.GetBytes(reqData.ToString());
5454 req.ContentLength = bs.Length;
5555 using (var stream = req.GetRequestStream())