{"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<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nnamespace moonmile.trac\n{\n\tpublic class TracTools\n\t{\n\t\tpublic _Setting Setting { get; set; }\n\n\t\tpublic class _Setting\n\t\t{\n\t\t\tpublic string UserName { get; set; }\n\t\t\tpublic string Password { get; set; }\n\t\t\tpublic string Url { get; set; }\n\t\t}\n\t\tpublic TracTools()\n\t\t{\n\t\t\tthis.Setting = new _Setting();\n\t\t}\n\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30d7\u30ed\u30ad\u30b7\u3092\u4f5c\u6210\u3059\u308b\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tprivate ITrac CreateProxy()\n\t\t{\n\t\t\tITrac proxy = CookComputing.XmlRpc.XmlRpcProxyGen.Create&lt;ITrac&gt;();\n\t\t\tproxy.Url = this.Setting.Url;\n\t\t\tproxy.UserAgent = &amp;quot;trac-tools&amp;quot;;\n\t\t\tproxy.Credentials = new NetworkCredential(\n\t\t\t\tSetting.UserName, Setting.Password);\n\t\t\treturn proxy;\n\t\t}\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ api \u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic List&lt;string&gt; ListMethods()\n\t\t{\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tstring &#x5B;] res = proxy.SystemListMethods();\n\t\t\tList&lt;string&gt; lst = res.ToList&lt;string&gt;();\n\t\t\treturn lst;\n\t\t}\n\t\tpublic string MethodHelp(string name)\n\t\t{\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n\t\t\tITrac proxy = CreateProxy();\n\t\t\treturn proxy.SystemMethodHelp(name);\n\t\t}\n\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;id&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic object&#x5B;] TicketGetActions(int id)\n\t\t{\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tobject&#x5B;] res = proxy.TicketGetActions(id);\n\n\t\t\tforeach (object&#x5B;] act in res)\n\t\t\t{\n\t\t\t\tConsole.WriteLine(&amp;quot;{0}:{1}:{2}&amp;quot;, act&#x5B;0], act&#x5B;1], act&#x5B;2]);\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;id&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic Ticket TicketGet(int id)\n\t\t{\n\t\t\t\/\/\u30d7\u30ed\u30ad\u30b7\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tobject &#x5B;]res =  proxy.TicketGet(id);\n\t\t\treturn new Ticket(res);\n\t\t}\n\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u3092\u65b0\u898f\u4f5c\u6210\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;ti&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic int TicketCreate(Ticket ti)\n\t\t{\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tint id = proxy.TicketCreate(ti.Summary, ti.Description, ti.Attributes());\n\t\t\treturn id;\n\t\t}\n\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306b\u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;ti&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic Ticket TicketUpdate(Ticket ti)\n\t\t{\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tobject&#x5B;] res = proxy.TicketUpdate(ti.ID, ti.Comment, ti.Attributes());\n\t\t\treturn new Ticket(res);\n\t\t}\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u66f4\u65b0\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;ti&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic Ticket TicketUpdate(Ticket ti, string act)\n\t\t{\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tXmlRpcStruct st = ti.Attributes();\n\t\t\tst.Add(&amp;quot;action&amp;quot;, act);\n\t\t\tobject&#x5B;] res = proxy.TicketUpdate(ti.ID, ti.Comment, st);\n\t\t\treturn new Ticket(res);\n\t\t}\n\t\t\/\/\/ &lt;summary&gt;\n\t\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u3092\u524a\u9664\n\t\t\/\/\/ &lt;\/summary&gt;\n\t\t\/\/\/ &lt;param name=&amp;quot;ti&amp;quot;&gt;&lt;\/param&gt;\n\t\t\/\/\/ &lt;returns&gt;&lt;\/returns&gt;\n\t\tpublic int TicketDelete(int id)\n\t\t{\n\t\t\tITrac proxy = CreateProxy();\n\t\t\tint res = proxy.TicketDelete(id);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tpublic interface ITrac : IXmlRpcProxy\n\t{\n\t\t&#x5B;XmlRpcMethod(&amp;quot;ticket.get&amp;quot;)]\n\t\tobject&#x5B;] TicketGet(int id);\n\t\t&#x5B;XmlRpcMethod(&amp;quot;ticket.create&amp;quot;)]\n\t\tint TicketCreate(string summary, string desc, XmlRpcStruct attrs);\n\t\t&#x5B;XmlRpcMethod(&amp;quot;ticket.update&amp;quot;)]\n\t\tobject&#x5B;] TicketUpdate(int id,  string comment, XmlRpcStruct attrs);\n\t\t&#x5B;XmlRpcMethod(&amp;quot;ticket.delete&amp;quot;)]\n\t\tint TicketDelete(int id);\n\t\t&#x5B;XmlRpcMethod(&amp;quot;ticket.getActions&amp;quot;)]\n\t\tobject&#x5B;] TicketGetActions(int id);\n\t}\n\n\t\/\/\/ &lt;summary&gt;\n\t\/\/\/ \u30c1\u30b1\u30c3\u30c8\u306e\u5927\u307e\u304b\u306a\u30af\u30e9\u30b9\n\t\/\/\/ &lt;\/summary&gt;\n\tpublic class Ticket\n\t{\n\t\tpublic int ID;\n\t\tpublic DateTime CreateDateTime;\n\t\tpublic DateTime ChangeDateTime;\n\t\tpublic string Summary = &amp;quot;&amp;quot;;\n\t\tpublic string Reporter = &amp;quot;&amp;quot;;\n\t\tpublic string Owner = &amp;quot;&amp;quot;;\n\t\tpublic string Description = &amp;quot;&amp;quot;;\n\t\tpublic string TicketType = &amp;quot;&amp;quot;;\n\t\tpublic string Priority = &amp;quot;&amp;quot;;\n\t\tpublic string Comment = &amp;quot;&amp;quot;;\n\t\tpublic object&#x5B;] result = null;\n\n\t\tpublic Ticket()\n\t\t{\n\t\t}\n\t\tpublic Ticket(object&#x5B;] ary)\n\t\t{\n\t\t\tthis.FromArray(ary);\n\t\t}\n\n\t\tpublic Ticket FromArray(object&#x5B;] ary)\n\t\t{\n\t\t\tTicket ti = this;\n\t\t\tti.ID = (int)ary&#x5B;0];\n\t\t\tti.result = ary;\n\t\t\tforeach (object o in ary)\n\t\t\t{\n\t\t\t\tXmlRpcStruct st = o as XmlRpcStruct;\n\t\t\t\tif (st != null)\n\t\t\t\t{\n\t\t\t\t\tforeach (string key in st.Keys)\n\t\t\t\t\t{\n\t\t\t\t\t\tobject obj = st&#x5B;key];\n\t\t\t\t\t\tConsole.WriteLine(&amp;quot;{0}:{1}:{2}&amp;quot;, key, obj.GetType(), obj);\n\t\t\t\t\t\tswitch (key)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase &amp;quot;owner&amp;quot;: ti.Owner = (string)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;reporter&amp;quot;: ti.Reporter = (string)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;summary&amp;quot;: ti.Summary = (string)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;description&amp;quot;: ti.Description = (string)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;time&amp;quot;: ti.CreateDateTime = (DateTime)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;changetime&amp;quot;: ti.ChangeDateTime = (DateTime)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;type&amp;quot;: ti.TicketType = (string)obj; break;\n\t\t\t\t\t\t\tcase &amp;quot;priority&amp;quot;: ti.Priority = (string)obj; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ti;\n\t\t}\n\t\tpublic XmlRpcStruct Attributes()\n\t\t{\n\t\t\tXmlRpcStruct st = new XmlRpcStruct();\n\t\t\tst.Add( &amp;quot;owner&amp;quot;, this.Owner );\n\t\t\tst.Add(&amp;quot;reporter&amp;quot;, this.Reporter);\n\t\t\tst.Add(&amp;quot;summary&amp;quot;, this.Summary);\n\t\t\tst.Add(&amp;quot;description&amp;quot;, this.Description);\n\t\t\tst.Add(&amp;quot;type&amp;quot;, this.TicketType);\n\t\t\tst.Add(&amp;quot;priority&amp;quot;, this.Priority);\n\t\t\treturn st;\n\t\t}\n\t}\n}\n<\/pre>\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<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nnamespace TracPost\n{\n\tclass Program\n\t{\n\t\tstatic void Main(string&#x5B;] args)\n\t\t{\n\t\t\tTracTools trac = new TracTools();\n\n\t\t\ttrac.Setting.Url = &amp;quot;http:\/\/localhost:8000\/trac\/gokui-ios5\/login\/rpc&amp;quot;;\n\t\t\ttrac.Setting.UserName = &amp;quot;masuda&amp;quot;;\n\t\t\ttrac.Setting.Password = &amp;quot;masuda&amp;quot;;\n\n\t\t\tif (args.Length == 0)\n\t\t\t{\n\t\t\t\tUsage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (args&#x5B;0])\n\t\t\t\t{\n\t\t\t\t\tcase &amp;quot;apilist&amp;quot;:\n\t\t\t\t\t\tList&lt;string&gt; lst = trac.ListMethods();\n\t\t\t\t\t\tforeach (string name in lst)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tConsole.WriteLine(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;help&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 2)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstring txt = trac.MethodHelp(args&#x5B;1]);\n\t\t\t\t\t\t\tConsole.WriteLine(txt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;actions&amp;quot;:\n\t\t\t\t\t\tif ( args.Length == 2 ) {\n\t\t\t\t\t\t\ttrac.TicketGetActions(int.Parse(args&#x5B;1]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;get&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 2)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(int.Parse(args&#x5B;1]));\n\t\t\t\t\t\t\tConsole.WriteLine(ti.Summary);\n\t\t\t\t\t\t\tConsole.WriteLine(ti.Description);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;post&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 3)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTicket ti = new Ticket();\n\t\t\t\t\t\t\tti.Summary = args&#x5B;1];     \/\/  &amp;quot;\u6295\u7a3f&amp;quot; + DateTime.Now.ToString();\n\t\t\t\t\t\t\tti.Description = args&#x5B;2]; \/\/  &amp;quot;\u6295\u7a3f\u30c6\u30b9\u30c8\\nat&amp;quot; + DateTime.Now.ToString();\n\t\t\t\t\t\t\tti.Reporter = &amp;quot;masuda&amp;quot;;\n\t\t\t\t\t\t\tti.Owner = &amp;quot;someone&amp;quot;;\n\t\t\t\t\t\t\tint id = trac.TicketCreate(ti);\n\t\t\t\t\t\t\tConsole.WriteLine(&amp;quot;ID:{0}&amp;quot;, id );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;update&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 3)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint id = int.Parse(args&#x5B;1]);\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(id);\n\t\t\t\t\t\t\tti.Comment = args&#x5B;2];\n\t\t\t\t\t\t\tti = trac.TicketUpdate(ti);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;action&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 3)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint id = int.Parse(args&#x5B;1]);\n\t\t\t\t\t\t\tstring act = args&#x5B;2];\n\t\t\t\t\t\t\tTicket ti = trac.TicketGet(id);\n\t\t\t\t\t\t\tti = trac.TicketUpdate(ti, act);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase &amp;quot;delete&amp;quot;:\n\t\t\t\t\t\tif (args.Length == 2)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint id = int.Parse(args&#x5B;1]);\n\t\t\t\t\t\t\tint res = trac.TicketDelete(id);\n\t\t\t\t\t\t\tConsole.WriteLine(&amp;quot;result:{0}&amp;quot;, res);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpublic static void Usage()\n\t\t{\n\t\t\tConsole.WriteLine(&amp;quot;tracpost list : api list \u3092\u8868\u793a&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost help &#x5B;command]: \u30b3\u30de\u30f3\u30c9\u306e\u30d8\u30eb\u30d7\u3092\u8868\u793a&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost get &#x5B;id]: \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u53d6\u5f97&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost post &#x5B;summary] &#x5B;description]: \u30c1\u30b1\u30c3\u30c8\u3092\u767b\u9332&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost delete &#x5B;id]: \u6307\u5b9aID\u306e\u30c1\u30b1\u30c3\u30c8\u3092\u524a\u9664&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost update &#x5B;id] &#x5B;comment]: \u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0&amp;quot;);\n\t\t\tConsole.WriteLine(&amp;quot;tracpost action &#x5B;id] &#x5B;resolve]: \u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5909\u66f4&amp;quot;);\n\t\t}\n\t}\n}\n<\/pre>\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<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nTicket ti = new Ticket();\nti.Summary = args&#x5B;1];     \nti.Description = args&#x5B;2]; \nti.Reporter = &quot;masuda&quot;;\nti.Owner = &quot;someone&quot;;\nint id = trac.TicketCreate(ti);\n<\/pre>\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<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstring summary = args&#x5B;1];\nstring desc = args&#x5B;2];\nint id = trac.TicketCreate(summary, desc, &quot;masuda&quot;, &quot;someone&quot;);\n<\/pre>\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<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class Ticket \n{\n\tpublic string summary;\n\tpublic string desc;\n\tpublic string repoter ;\n\tpublic string owner ;\n}\n<\/pre>\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_memberships_contains_paid_content":false,"footnotes":""},"categories":[23,37],"tags":[],"class_list":["post-2684","post","type-post","status-publish","format-standard","hentry","category-csharp","category-trac"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_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}]}}