{"id":2684,"date":"2011-12-24T18:24:49","date_gmt":"2011-12-24T09:24:49","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/archives\/2684"},"modified":"2011-12-24T18:25:28","modified_gmt":"2011-12-24T09:25:28","slug":"trac-%e3%81%ab-xml-rpc-%e7%b5%8c%e7%94%b1%e3%81%a7%e3%83%81%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e6%8a%95%e7%a8%bf%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/2684","title":{"rendered":"Trac \u306b XML-RPC \u7d4c\u7531\u3067\u30c1\u30b1\u30c3\u30c8\u3092\u6295\u7a3f\u3059\u308b"},"content":{"rendered":"<p>\nTrac \u306e\u30c1\u30b1\u30c3\u30c8\u95a2\u4fc2\u306e api \u306f\u7d50\u69cb\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u3072\u3068\u307e\u305a\n<\/p>\n<ul>\n<li>ticket.getActions: \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\uff08\u89e3\u6c7a\u6e08\u307f\u3001\u62c5\u5f53\u8005\u5909\u66f4\u306a\u3069\uff09<\/li>\n<li>ticket.get: \u6307\u5b9aID \u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97\u3059\u308b<\/li>\n<li>ticket.create: \u65b0\u3057\u3044\u30c1\u30b1\u30c3\u30c8\u3092\u4f5c\u6210\u3059\u308b<\/li>\n<li>ticket.update: \u65e2\u5b58\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u5909\u66f4\u3059\u308b\u3001\u30b3\u30e1\u30f3\u30c8\u3092\u4ed8\u3051\u308b<\/li>\n<li>ticket.delete: \u6307\u5b9aID \u306e\u30c1\u30b1\u30c3\u30c8\u3092\u524a\u9664\u3059\u308b<\/li>\n<\/ul>\n<p>\n\u306a\u3068\u3053\u308d\u304c\u3042\u308c\u3070\u3001\u5927\u4e08\u592b\u304b\u306a\u3068\u3002\u7d30\u304b\u306a\u3068\u3053\u308d\u306f\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u64cd\u4f5c\u3059\u308c\u3070\u3088\u3044\u306e\u3067\u3001\u5b8c\u5168\u306b\u30a8\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u306e\u306f\u5f8c\u307b\u3069\u6a5f\u4f1a\u304c\u3042\u308c\u3070\u4f5c\u3063\u3066\u3044\u304d\u307e\u3059\u3002\n<\/p>\n<p>\n\u4ee5\u4e0b\u304c\u3001TracTools \u30af\u30e9\u30b9\u3002\u30c1\u30b1\u30c3\u30c8\u81ea\u4f53\u306f\u3001object[] \u306b\u306a\u308a\u3001\u305d\u306e\u307e\u307e\u3067\u306f\u6271\u3044\u3065\u3089\u3044\u306e\u3067 Ticket \u30af\u30e9\u30b9\u3092\u4f5c\u3063\u3066\u3044\u307e\u3059\u3002\n<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nnamespace moonmile.trac<br \/>\n{<br \/>\n\tpublic class TracTools<br \/>\n\t{<br \/>\n\t\tpublic _Setting Setting { get; set; }<\/p>\n<p>\t\tpublic class _Setting<br \/>\n\t\t{<br \/>\n\t\t\tpublic string UserName { get; set; }<br \/>\n\t\t\tpublic string Password { get; set; }<br \/>\n\t\t\tpublic string Url { get; set; }<br \/>\n\t\t}<br \/>\n\t\tpublic TracTools()<br \/>\n\t\t{<br \/>\n\t\t\tthis.Setting = new _Setting();<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30d7\u30ed\u30ad\u30b7\u3092\u4f5c\u6210\u3059\u308b<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tprivate ITrac CreateProxy()<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CookComputing.XmlRpc.XmlRpcProxyGen.Create&lt;ITrac&gt;();<br \/>\n\t\t\tproxy.Url = this.Setting.Url;<br \/>\n\t\t\tproxy.UserAgent = &quot;trac-tools&quot;;<br \/>\n\t\t\tproxy.Credentials = new NetworkCredential(<br \/>\n\t\t\t\tSetting.UserName, Setting.Password);<br \/>\n\t\t\treturn proxy;<br \/>\n\t\t}<br \/>\n\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ api \u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic List&lt;string&gt; ListMethods()<br \/>\n\t\t{<br \/>\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tstring [] res = proxy.SystemListMethods();<br \/>\n\t\t\tList&lt;string&gt; lst = res.ToList&lt;string&gt;();<br \/>\n\t\t\treturn lst;<br \/>\n\t\t}<br \/>\n\t\tpublic string MethodHelp(string name)<br \/>\n\t\t{<br \/>\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\treturn proxy.SystemMethodHelp(name);<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;id&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic object[] TicketGetActions(int id)<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tobject[] res = proxy.TicketGetActions(id);<\/p>\n<p>\t\t\tforeach (object[] act in res)<br \/>\n\t\t\t{<br \/>\n\t\t\t\tConsole.WriteLine(&quot;{0}:{1}:{2}&quot;, act[0], act[1], act[2]);<br \/>\n\t\t\t}<br \/>\n\t\t\treturn res;<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;id&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic Ticket TicketGet(int id)<br \/>\n\t\t{<br \/>\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tobject []res =  proxy.TicketGet(id);<br \/>\n\t\t\treturn new Ticket(res);<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u3092\u65b0\u898f\u4f5c\u6210<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;ti&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic int TicketCreate(Ticket ti)<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tint id = proxy.TicketCreate(ti.Summary, ti.Description, ti.Attributes());<br \/>\n\t\t\treturn id;<br \/>\n\t\t}<\/p>\n<p>\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306b\u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;ti&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic Ticket TicketUpdate(Ticket ti)<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tobject[] res = proxy.TicketUpdate(ti.ID, ti.Comment, ti.Attributes());<br \/>\n\t\t\treturn new Ticket(res);<br \/>\n\t\t}<br \/>\n\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u66f4\u65b0<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;ti&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic Ticket TicketUpdate(Ticket ti, string act)<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tXmlRpcStruct st = ti.Attributes();<br \/>\n\t\t\tst.Add(&quot;action&quot;, act);<br \/>\n\t\t\tobject[] res = proxy.TicketUpdate(ti.ID, ti.Comment, st);<br \/>\n\t\t\treturn new Ticket(res);<br \/>\n\t\t}<br \/>\n\t\t\/\/\/ &lt;summary&gt;<br \/>\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u3092\u524a\u9664<br \/>\n\t\t\/\/\/ &lt;\/summary&gt;<br \/>\n\t\t\/\/\/ &lt;param name=&quot;ti&quot;&gt;&lt;\/param&gt;<br \/>\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;<br \/>\n\t\tpublic int TicketDelete(int id)<br \/>\n\t\t{<br \/>\n\t\t\tITrac proxy = CreateProxy();<br \/>\n\t\t\tint res = proxy.TicketDelete(id);<br \/>\n\t\t\treturn res;<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>\tpublic interface ITrac : IXmlRpcProxy<br \/>\n\t{<br \/>\n\t\t[XmlRpcMethod(&quot;ticket.get&quot;)]<br \/>\n\t\tobject[] TicketGet(int id);<br \/>\n\t\t[XmlRpcMethod(&quot;ticket.create&quot;)]<br \/>\n\t\tint TicketCreate(string summary, string desc, XmlRpcStruct attrs);<br \/>\n\t\t[XmlRpcMethod(&quot;ticket.update&quot;)]<br \/>\n\t\tobject[] TicketUpdate(int id,  string comment, XmlRpcStruct attrs);<br \/>\n\t\t[XmlRpcMethod(&quot;ticket.delete&quot;)]<br \/>\n\t\tint TicketDelete(int id);<br \/>\n\t\t[XmlRpcMethod(&quot;ticket.getActions&quot;)]<br \/>\n\t\tobject[] TicketGetActions(int id);<br \/>\n\t}<\/p>\n<p>\t\/\/\/ &lt;summary&gt;<br \/>\n\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306e\u5927\u307e\u304b\u306a\u30af\u30e9\u30b9<br \/>\n\t\/\/\/ &lt;\/summary&gt;<br \/>\n\tpublic class Ticket<br \/>\n\t{<br \/>\n\t\tpublic int ID;<br \/>\n\t\tpublic DateTime CreateDateTime;<br \/>\n\t\tpublic DateTime ChangeDateTime;<br \/>\n\t\tpublic string Summary = &quot;&quot;;<br \/>\n\t\tpublic string Reporter = &quot;&quot;;<br \/>\n\t\tpublic string Owner = &quot;&quot;;<br \/>\n\t\tpublic string Description = &quot;&quot;;<br \/>\n\t\tpublic string TicketType = &quot;&quot;;<br \/>\n\t\tpublic string Priority = &quot;&quot;;<br \/>\n\t\tpublic string Comment = &quot;&quot;;<br \/>\n\t\tpublic object[] result = null;<\/p>\n<p>\t\tpublic Ticket()<br \/>\n\t\t{<br \/>\n\t\t}<br \/>\n\t\tpublic Ticket(object[] ary)<br \/>\n\t\t{<br \/>\n\t\t\tthis.FromArray(ary);<br \/>\n\t\t}<\/p>\n<p>\t\tpublic Ticket FromArray(object[] ary)<br \/>\n\t\t{<br \/>\n\t\t\tTicket ti = this;<br \/>\n\t\t\tti.ID = (int)ary[0];<br \/>\n\t\t\tti.result = ary;<br \/>\n\t\t\tforeach (object o in ary)<br \/>\n\t\t\t{<br \/>\n\t\t\t\tXmlRpcStruct st = o as XmlRpcStruct;<br \/>\n\t\t\t\tif (st != null)<br \/>\n\t\t\t\t{<br \/>\n\t\t\t\t\tforeach (string key in st.Keys)<br \/>\n\t\t\t\t\t{<br \/>\n\t\t\t\t\t\tobject obj = st[key];<br \/>\n\t\t\t\t\t\tConsole.WriteLine(&quot;{0}:{1}:{2}&quot;, key, obj.GetType(), obj);<br \/>\n\t\t\t\t\t\tswitch (key)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tcase &quot;owner&quot;: ti.Owner = (string)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;reporter&quot;: ti.Reporter = (string)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;summary&quot;: ti.Summary = (string)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;description&quot;: ti.Description = (string)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;time&quot;: ti.CreateDateTime = (DateTime)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;changetime&quot;: ti.ChangeDateTime = (DateTime)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;type&quot;: ti.TicketType = (string)obj; break;<br \/>\n\t\t\t\t\t\t\tcase &quot;priority&quot;: ti.Priority = (string)obj; break;<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t}<br \/>\n\t\t\t\t}<br \/>\n\t\t\t}<br \/>\n\t\t\treturn ti;<br \/>\n\t\t}<br \/>\n\t\tpublic XmlRpcStruct Attributes()<br \/>\n\t\t{<br \/>\n\t\t\tXmlRpcStruct st = new XmlRpcStruct();<br \/>\n\t\t\tst.Add( &quot;owner&quot;, this.Owner );<br \/>\n\t\t\tst.Add(&quot;reporter&quot;, this.Reporter);<br \/>\n\t\t\tst.Add(&quot;summary&quot;, this.Summary);<br \/>\n\t\t\tst.Add(&quot;description&quot;, this.Description);<br \/>\n\t\t\tst.Add(&quot;type&quot;, this.TicketType);<br \/>\n\t\t\tst.Add(&quot;priority&quot;, this.Priority);<br \/>\n\t\t\treturn st;<br \/>\n\t\t}<br \/>\n\t}<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\n\u3053\u308c\u3092\u4f7f\u3063\u305f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304c\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3002\u30e6\u30fc\u30b6\u30fc\u540d\u3084\u3089\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u76f4\u66f8\u304d\u3067\u3059\u304c\u3001\u3053\u308c\u306f\u5f8c\u3067\u3001wordpress \u306e\u6642\u3068\u540c\u3058\u3088\u3046\u306b config \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u53d6\u5f97\u3059\u308b\u4e88\u5b9a\u3002\n<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nnamespace TracPost<br \/>\n{<br \/>\n\tclass Program<br \/>\n\t{<br \/>\n\t\tstatic void Main(string[] args)<br \/>\n\t\t{<br \/>\n\t\t\tTracTools trac = new TracTools();<\/p>\n<p>\t\t\ttrac.Setting.Url = &quot;http:\/\/localhost:8000\/trac\/gokui-ios5\/login\/rpc&quot;;<br \/>\n\t\t\ttrac.Setting.UserName = &quot;masuda&quot;;<br \/>\n\t\t\ttrac.Setting.Password = &quot;masuda&quot;;<\/p>\n<p>\t\t\tif (args.Length == 0)<br \/>\n\t\t\t{<br \/>\n\t\t\t\tUsage();<br \/>\n\t\t\t\treturn;<br \/>\n\t\t\t}<br \/>\n\t\t\telse<br \/>\n\t\t\t{<br \/>\n\t\t\t\tswitch (args[0])<br \/>\n\t\t\t\t{<br \/>\n\t\t\t\t\tcase &quot;apilist&quot;:<br \/>\n\t\t\t\t\t\tList&lt;string&gt; lst = trac.ListMethods();<br \/>\n\t\t\t\t\t\tforeach (string name in lst)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(name);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;help&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 2)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tstring txt = trac.MethodHelp(args[1]);<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(txt);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;actions&quot;:<br \/>\n\t\t\t\t\t\tif ( args.Length == 2 ) {<br \/>\n\t\t\t\t\t\t\ttrac.TicketGetActions(int.Parse(args[1]));<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;get&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 2)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(int.Parse(args[1]));<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(ti.Summary);<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(ti.Description);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;post&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 3)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tTicket ti = new Ticket();<br \/>\n\t\t\t\t\t\t\tti.Summary = args[1];     \/\/  &quot;\u6295\u7a3f&quot; + DateTime.Now.ToString();<br \/>\n\t\t\t\t\t\t\tti.Description = args[2]; \/\/  &quot;\u6295\u7a3f\u30c6\u30b9\u30c8\\nat&quot; + DateTime.Now.ToString();<br \/>\n\t\t\t\t\t\t\tti.Reporter = &quot;masuda&quot;;<br \/>\n\t\t\t\t\t\t\tti.Owner = &quot;someone&quot;;<br \/>\n\t\t\t\t\t\t\tint id = trac.TicketCreate(ti);<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(&quot;ID:{0}&quot;, id );<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;update&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 3)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tint id = int.Parse(args[1]);<br \/>\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(id);<br \/>\n\t\t\t\t\t\t\tti.Comment = args[2];<br \/>\n\t\t\t\t\t\t\tti = trac.TicketUpdate(ti);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;action&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 3)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tint id = int.Parse(args[1]);<br \/>\n\t\t\t\t\t\t\tstring act = args[2];<br \/>\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(id);<br \/>\n\t\t\t\t\t\t\tti = trac.TicketUpdate(ti, act);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<br \/>\n\t\t\t\t\tcase &quot;delete&quot;:<br \/>\n\t\t\t\t\t\tif (args.Length == 2)<br \/>\n\t\t\t\t\t\t{<br \/>\n\t\t\t\t\t\t\tint id = int.Parse(args[1]);<br \/>\n\t\t\t\t\t\t\tint res = trac.TicketDelete(id);<br \/>\n\t\t\t\t\t\t\tConsole.WriteLine(&quot;result:{0}&quot;, res);<br \/>\n\t\t\t\t\t\t}<br \/>\n\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t}<br \/>\n\t\t\t}<br \/>\n\t\t}<br \/>\n\t\tpublic static void Usage()<br \/>\n\t\t{<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost list : api list \u3092\u8868\u793a&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost help [command]: \u30b3\u30de\u30f3\u30c9\u306e\u30d8\u30eb\u30d7\u3092\u8868\u793a&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost get [id]: \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost post [summary] [description]: \u30c1\u30b1\u30c3\u30c8\u3092\u767b\u9332&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost delete [id]: \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u524a\u9664&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost update [id] [comment]: \u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0&quot;);<br \/>\n\t\t\tConsole.WriteLine(&quot;tracpost action [id] [resolve]: \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5909\u66f4&quot;);<br \/>\n\t\t}<br \/>\n\t}<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\n\u3055\u3066\u3001\u3053\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u4ed5\u65b9\u3067\u3059\u304c\u3001\u9806\u5e8f\u3068\u3057\u3066\u300c\u30af\u30e9\u30b9\u300d\u2192\u300cmain \u95a2\u6570\u300d\u306e\u9806\u3067\u4f5c\u3063\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u300cmain \u95a2\u6570\u300d\u3067\u547c\u3073\u51fa\u3057\u5074\u3092\u4f5c\u3063\u305f\u5f8c\u306b\u3001TicketTools \u30af\u30e9\u30b9\u3092\u305d\u308c\u306b\u5408\u308f\u305b\u3066\u3044\u307e\u3059\u3002<br \/>\n\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08\u3092\u601d\u3063\u3066\u8eab\u69cb\u3048\u3066\u3057\u307e\u3046\u3068\u3001\u3064\u3044\u3064\u3044\u8907\u96d1\u306a\u30e1\u30bd\u30c3\u30c9\u3084\u4f59\u5206\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4f5c\u3063\u3066\u3057\u307e\u3044\u304c\u3061\u3067\u3059\u304c\u3001main \u95a2\u6570\u3067\u3001<b>\u3069\u306e\u3088\u3046\u306b\u30af\u30e9\u30b9\u3092\u5229\u7528\u3057\u305f\u3044\u304b<\/b>\u3092\u66f8\u3044\u3066\u304b\u3089\u3001\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u3068\u3001\u3053\u308c\u3089\u306e\u7121\u99c4\u304c\u7701\u3051\u307e\u3059\u3002\u3042\u308b\u610f\u5473\u3067\u3001\u30c6\u30b9\u30c8\u99c6\u52d5\u306b\u8fd1\u3044\u306e\u3067\u3059\u304c\u3001\u30c6\u30b9\u30c8\u81ea\u4f53\u306b\u306f\u3042\u307e\u308a\u91cd\u304d\u3092\u7f6e\u3044\u3066\u3044\u306a\u304f\u3066\u3001\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08User Interface Develop Driven \u3068\u304b\uff09\u3092\u5148\u306b\u6c7a\u3081\u3066<b>\u3069\u306e\u3088\u3046\u306b\u4f7f\u3046\u306e\u304b<\/b>\u3092\u4e3b\u5c0e\u3055\u305b\u3066\u3044\u307e\u3059\u3002\n<\/p>\n<p>\n\u4f8b\u3048\u3070\u3001\u65b0\u3057\u3044\u30c1\u30b1\u30c3\u30c8\u3092\u30dd\u30b9\u30c8\u3059\u308b\u5834\u5408\u306f\u3001\n<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nTicket ti = new Ticket();<br \/>\nti.Summary = args[1];<br \/>\nti.Description = args[2];<br \/>\nti.Reporter = &quot;masuda&quot;;<br \/>\nti.Owner = &quot;someone&quot;;<br \/>\nint id = trac.TicketCreate(ti);<br \/>\n[\/code]<\/p>\n<p>\n\u306e\u3088\u3046\u306b Ticket \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u3063\u305f\u5f8c\u306b\u3001\u9069\u5f53\u306b\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3082\u66f8\u304f\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nstring summary = args[1];<br \/>\nstring desc = args[2];<br \/>\nint id = trac.TicketCreate(summary, desc, &quot;masuda&quot;, &quot;someone&quot;);<br \/>\n[\/code]<\/p>\n<p>\n\u3053\u306e\u5834\u5408\u3001TicketCreate \u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306b\u5404\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6307\u5b9a\u3059\u308b\u306e\u3067\u3059\u304c\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u3084\u3089\u4f55\u3084\u3089\u304c\u591a\u304f\u306a\u3063\u3066\u3057\u307e\u305f\u3068\u304d\u306b\u306f\u7834\u7dbb\u3057\u305d\u3046\u3067\u3059\u306d\u3002\u307e\u305f\u3001\u30c1\u30b1\u30c3\u30c8\u306e update \u3092\u8003\u3048\u308b\u3068\u3001\u30c1\u30b1\u30c3\u30c8\u306e\u5185\u5bb9\u306f<b>Ticket \u30af\u30e9\u30b9\u3092\u4f7f\u3046\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066<\/b>\u306a\u3093\u3089\u304b\u306e\u5f62\u3067\u307e\u3068\u3081\u3066\u304a\u304d\u305f\u3044\u3068\u3053\u308d\u3067\u3059\u3002\n<\/p>\n<p>\n\u3067\u3001\n<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\npublic class Ticket<br \/>\n{<br \/>\n\tpublic string summary;<br \/>\n\tpublic string desc;<br \/>\n\tpublic string repoter ;<br \/>\n\tpublic string owner ;<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\n\u306e\u3088\u3046\u306b\u30e6\u30fc\u30b6\u30fc\u5074\u3067\u30af\u30e9\u30b9\u3092\u6307\u5b9a\u3057\u3066\u3001TicketCreate \u30e1\u30bd\u30c3\u30c9\u3092\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u6307\u5b9a\u3057\u3066\u547c\u3073\u51fa\u3057\u3066\u3082\u3044\u3044\u306e\u3067\u3059\u304c\u3001\u3053\u308c\u3063\u3066\u3044\u3061\u3044\u3061\u30e6\u30fc\u30b6\u30fc\u5074\u3067\u6307\u5b9a\u3059\u308b\u306e\u306f\u9762\u5012\u306a\u8a71\u3067\u3059\u3002Ticket \u30af\u30e9\u30b9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\u306a\u3069\u3092\u5909\u3048\u305f\u3044\u3068\u304d\u3082\u56f0\u308b\u3057\u3002\n<\/p>\n<p>\n\u3068\u3044\u3046\u8a33\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u6c17\u6301\u3061\u306b\u306a\u3063\u3066\u3001\u30e6\u30fc\u30b6\u30fc\u5074\u306e\u307b\u3046\u304b\u3089\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u3059\u308b\u3068\u3001\u5148\u306e\u300ctrac.TicketCreate(ti)\u300d\u3067\u547c\u3073\u51fa\u3057\u305f\u307b\u3046\u304c\u697d\u3067\u3042\u308d\u3046\u3001\u3068\u3044\u3046\u306e\u304c\u3001\u3053\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30bf\u30a4\u30eb\u306e\u30b9\u30bf\u30fc\u30c8\u3060\u3063\u305f\u308a\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trac \u306e\u30c1\u30b1\u30c3\u30c8\u95a2\u4fc2\u306e api \u306f\u7d50\u69cb\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u3072\u3068\u307e\u305a ticket.getActions: \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\uff08\u89e3\u6c7a\u6e08\u307f\u3001\u62c5\u5f53\u8005\u5909\u66f4\u306a\u3069\uff09 ticket.get: \u6307\u5b9aID \u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97\u3059\u308b ticke &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/2684\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[23,37],"tags":[],"class_list":["post-2684","post","type-post","status-publish","format-standard","hentry","category-csharp","category-trac"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=2684"}],"version-history":[{"count":1,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2684\/revisions"}],"predecessor-version":[{"id":2685,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/2684\/revisions\/2685"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=2684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=2684"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=2684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}