{"id":3817,"date":"2011-11-26T20:26:49","date_gmt":"2011-11-26T11:26:49","guid":{"rendered":"http:\/\/mimumimu.net\/blog\/2011\/11\/26\/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82\/"},"modified":"2012-04-21T18:23:07","modified_gmt":"2012-04-21T09:23:07","slug":"twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82","status":"publish","type":"post","link":"https:\/\/mimumimu.net\/blog\/2011\/11\/26\/twitter-%e3%81%ae-oauth-1-0-%e8%aa%8d%e8%a8%bc%e3%82%92%e8%87%aa%e5%88%86%e3%81%a7%e3%82%b3%e3%83%bc%e3%83%89%e6%9b%b8%e3%81%84%e3%81%a6%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82\/","title":{"rendered":"Twitter \u306e OAuth 1.0 \u8a8d\u8a3c\u3092\u81ea\u5206\u3067\u30b3\u30fc\u30c9\u66f8\u3044\u3066\u3084\u3063\u3066\u307f\u305f\u3002"},"content":{"rendered":"<p>\u307f\u3080\u3089\u3067\u3059\u3002<\/p>\n<p>\u3072\u3068\u307e\u305a\u3001\u304a\u3079\u3093\u304d\u3087\u30fc\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u5f8c\u304b\u3089\u3082\u5206\u304b\u308b\u3088\u3046\u306b\u3001    <br \/>\u5909\u6570\u3092\u591a\u304f\u4f7f\u3063\u3066\u6587\u5b57\u5217\u51fa\u529b\u3092\u3075\u3093\u3060\u3093\u306b\u51fa\u3057\u306a\u304c\u3089\u3002<\/p>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u3001\u6d77\u304b\u3089\u6765\u305f\u4fb5\u7565\u8005\u306b\u4fb5\u7565\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001    <br \/>\u305d\u3093\u306a\u3082\u306e\u5168\u304f\u6c17\u306b\u3057\u306a\u3044\u3001\u3080\u3057\u308d\u3001\u4fb5\u7565\u3055\u308c\u3066\u3044\u306a\u3044\u3067\u30b2\u30bd\uff01<\/p>\n<p>&#8212;-<\/p>\n<p>\u53c2\u8003\u8cc7\u6599\uff1a<\/p>\n<p>* <a href=\"http:\/\/oauth.net\/core\/1.0\">http:\/\/oauth.net\/core\/1.0<\/a>     <br \/>* <a href=\"http:\/\/hueniverse.com\/oauth\/guide\/authentication\/\">http:\/\/hueniverse.com\/oauth\/guide\/authentication\/<\/a>     <br \/>* <a href=\"https:\/\/dev.twitter.com\/docs\/auth\/authorizing-request\/\">https:\/\/dev.twitter.com\/docs\/auth\/authorizing-request\/<\/a><\/p>\n<p>&#8212;-<\/p>\n<p><a title=\"https:\/\/gist.github.com\/1395485\" href=\"https:\/\/gist.github.com\/1395485\">https:\/\/gist.github.com\/1395485<\/a><\/p>\n<div style=\"padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px\" id=\"scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:776c53a9-ef65-4fe8-b153-511c0cc84aa5\" class=\"wlWriterEditableSmartContent\">\n<pre class=\"brush: c#;\">using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Net;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Web;\n\n\/*\n * \u3053\u306e\u8fba\u3092\u53c2\u8003\u306b\uff1a\n * \n * http:\/\/oauth.net\/core\/1.0\n * http:\/\/hueniverse.com\/oauth\/guide\/authentication\/\n * https:\/\/dev.twitter.com\/docs\/auth\/authorizing-request\n *\/\n\nnamespace Direct_Commit_Twitter\n{\n    class Program\n    {\n\n        static void Main(string[] args)\n        {\n            \/\/\n            \/\/ \u4f7f\u3046\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u6b21\u306e\u3088\u3046\u306a\u3082\u306e\u3002\n            \/\/\n            \/\/ OAuth Consumer Key       : Consumer Key \u305d\u306e\u307e\u307e\u3002\n            \/\/ OAuth Token              : Access Token \u305d\u306e\u307e\u307e\u3002 \uff08\u4eca\u56de\u306f\u3053\u308c\u3082\u53d6\u5f97\u3002\uff09\n            \/\/ OAuth Nonce              : \u30e9\u30f3\u30c0\u30e0\u6587\u5b57\u5217\u3092\u4e0e\u3048\u308b\u3002 \uff08\u6bce\u56de\u5909\u66f4\u3059\u308b\u3002\uff09\n            \/\/ OAuth Signature          : OAuth Signature \u4ee5\u5916\u306e\u5024\u3067 HMAC-SHA1 \u3092\u3068\u3063\u305f\u5024\u3002\n            \/\/ OAuth Signature Method   : Twitter \u306f HMAC-SHA1 \u6307\u5b9a\u3063\u307d\u3044\u306e\u3067 HMAC-SHA1.\n            \/\/ OAuth Time Stamp         : UNIX \u6642\u9593 (1970-01-01 UTC \u304b\u3089\u306e\u79d2\u6570) \u3092\u4e0e\u3048\u308b\u3002\n            \/\/                          : (\u4eca\u56de\u306f GetUNIXTime() \u30e1\u30bd\u30c3\u30c9\u3067\u53d6\u5f97\u3057\u307e\u3059\u3002)\n            \/\/ OAuth Version            : \u4eca\u56de\u306f 1.0 \u3092\u4f7f\u3046\u306e\u3067\u30011.0.\n            \/\/\n\n            string consumer_key = \"oDcUp76alv6VctYvRx2g\";\n            string consumer_secret = \"mg1U9TEFVafIPQm0Y0YuLR8EZatXiDBvPLiiCConzbg\";\n\n            string access_token = \"\";\n            string access_secret = \"\";\n\n            string tweet_text = \"\u30b2\u30bd\u30fc\u30b2\u30bd\u30fc\";\n\n            \/************************ \u4ee5\u4e0b\u3001\u9ed9\u3005\u3068\u51e6\u7406 ********************\/\n\n            string[] verify_token;\n\n            if (access_token == \"\" || access_secret == \"\")\n            {\n\n                #region 01. Request Token \u3092\u53d6\u5f97\u3057\u306a\u30a4\u30ab\uff1f\n                {\n                    Console.WriteLine(\"01 - Token \u3092\u53d6\u5f97\u3057\u306a\u30a4\u30ab\uff1f\");\n                    Console.WriteLine(\"-------------------------------------------------\");\n\n                    Random rand = new Random();\n                    byte[] nonce_b = new byte[64];\n\n                    rand.NextBytes(nonce_b);\n\n                    string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();\n                    long unixtime = GetUNIXTime();\n\n                    \/\/\n                    \/\/ OAuth Signature \u751f\u6210\u306e\u305f\u3081\u306b\u3001\u305d\u308c\u4ee5\u5916\u3067\u4eee\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u6587\u5b57\u5217\u3092\u4f5c\u6210\u3059\u308b\u3002\n                    \/\/ \u3053\u306e\u969b\u3001\u5404\u30d1\u30e9\u30e1\u30fc\u30bf\u306f ABC \u9806\u306b\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\n                    \/\/\n                    string signature_request = \"POST&amp;\" + UrlEncode(\"https:\/\/api.twitter.com\/oauth\/request_token\");\n                    signature_request += \"&amp;\" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, null, null, null));\n\n                    \/\/\n                    \/\/ \u3061\u3083\u3093\u3068\u3057\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u6587\u5b57\u5217\u3092\u4f5c\u308b\u3002\n                    \/\/\n                    string signature = GetSignature(consumer_secret, null, signature_request);\n                    string param = MakeParamString(consumer_key, nonce, signature, unixtime, null, null, null);\n\n                    DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, null, null, null);\n                    return;\n                    \/\/\n                    \/\/ \u554f\u3044\u5408\u308f\u305b\u3002\n                    \/\/\n                    Console.WriteLine(\"* Access : https:\/\/api.twitter.com\/oauth\/request_token?\" + param);\n                    HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(\"https:\/\/api.twitter.com\/oauth\/request_token?\" + param);\n                    hwr.Method = \"POST\";\n                    WebResponse ret = hwr.GetResponse();\n                    verify_token = new StreamReader(ret.GetResponseStream()).ReadToEnd().Split('&amp;');\n\n                    ret.Close();\n\n                    Console.WriteLine();\n                    Console.WriteLine(\"Response : \");\n                    foreach (string s in verify_token)\n                        Console.WriteLine(\"&gt; \" + s);\n                }\n                #endregion\n\n                #region 02. Access Token \u3092\u53d6\u5f97\u3057\u306a\u30a4\u30ab\uff1f\n                {\n                    Console.WriteLine();\n                    Console.WriteLine(\"02 - Access Token \u3092\u53d6\u5f97\u3057\u306a\u30a4\u30ab\uff1f\");\n                    Console.WriteLine(\"-------------------------------------------------\");\n\n                    string request_token = \"\";\n                    string request_secret = \"\";\n\n                    \/\/\n                    \/\/ \u30d6\u30e9\u30a6\u30b6\u958b\u3044\u3066\u8a8d\u8a3c\u3002\n                    \/\/\n                    foreach (string s in verify_token)\n                    {\n                        int p = s.IndexOf(\"oauth_token=\");\n                        if (p != -1)\n                        {\n                            request_token = s.Substring(p + \"oauth_token=\".Length);\n                            break;\n                        }\n                    }\n                    Console.WriteLine(\"- OAuth Token : \" + request_token);\n                    Console.WriteLine(\"* Browser Open : https:\/\/twitter.com\/oauth\/authorize?oauth_token=\" + request_token);\n                    Process.Start(\"https:\/\/twitter.com\/oauth\/authorize?oauth_token=\" + request_token);\n\n                    \/\/\n                    \/\/ PIN \u3092\u5165\u529b\u3055\u305b\u308b\u3002\n                    \/\/\n                    Console.Write(\"\\nINPUT PIN : \");\n                    string pin = Console.ReadLine();\n\n                    foreach (string s in verify_token)\n                    {\n                        int p = s.IndexOf(\"oauth_token_secret=\");\n                        if (p != -1)\n                        {\n                            request_secret = s.Substring(p + \"oauth_token_secret=\".Length);\n                            break;\n                        }\n                    }\n\n\n                    \/\/\n                    \/\/ \u4ee5\u4e0b Twitter \u3068\u3082\u304f\u3082\u304f\u901a\u4fe1\u3002\n                    \/\/\n\n                    Random rand = new Random();\n                    byte[] nonce_b = new byte[64];\n\n                    rand.NextBytes(nonce_b);\n\n                    string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();\n                    long unixtime = GetUNIXTime();\n\n                    \/\/\n                    \/\/ Signature \u751f\u6210\u306e\u305f\u3081\u306e\u4e00\u6642\u7684\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u6587\u5b57\u5217\u3092\u4f5c\u6210\u3002\n                    \/\/\n                    string signature_request = \"POST&amp;\" + UrlEncode(\"https:\/\/api.twitter.com\/oauth\/access_token\");\n                    signature_request += \"&amp;\" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, request_token, pin, null));\n\n                    string signature = GetSignature(consumer_secret, request_secret, signature_request);\n                    string param = MakeParamString(consumer_key, nonce, signature, unixtime, request_token, pin, null);\n\n                    DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, request_token, request_secret, pin);\n\n                    \/\/\n                    \/\/ \u554f\u3044\u5408\u308f\u305b\u3002\n                    \/\/\n                    Console.WriteLine(\"* Access : https:\/\/api.twitter.com\/oauth\/access_token?\" + param);\n                    HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(\"https:\/\/api.twitter.com\/oauth\/access_token?\" + param);\n                    hwr.Method = \"POST\";\n                    hwr.Headers.Add(\"Authorization\", \"OAuth\");\n\n                    WebResponse ret = hwr.GetResponse();\n                    verify_token = new StreamReader(ret.GetResponseStream()).ReadToEnd().Split('&amp;');\n\n                    ret.Close();\n\n                    Console.WriteLine();\n                    Console.WriteLine(\"Response : \");\n                    foreach (string s in verify_token)\n                    {\n                        if (s.IndexOf(\"oauth_token=\") != -1)\n                            access_token = s.Substring(s.IndexOf(\"=\") + 1);\n\n                        if (s.IndexOf(\"oauth_token_secret=\") != -1)\n                            access_secret = s.Substring(s.IndexOf(\"=\") + 1);\n\n                        Console.WriteLine(\"&gt; \" + s);\n                    }\n                }\n                #endregion\n\n            }\n\n            #region 03. \u3064\u3076\u3084\u304b\u306a\u30a4\u30ab\uff1f\n            {\n                Console.WriteLine();\n                Console.WriteLine(\"03 - \u3064\u3076\u3084\u304b\u306a\u30a4\u30ab\uff1f\");\n                Console.WriteLine(\"-------------------------------------------------\");\n                \n                Random rand = new Random();\n                byte[] nonce_b = new byte[64];\n\n                rand.NextBytes(nonce_b);\n\n                string nonce = Math.Abs(BitConverter.ToInt64(nonce_b, 0)).ToString();\n                long unixtime = GetUNIXTime();\n\n                string tweet_data = UrlEncode(tweet_text);\n\n                string signature_request = \"POST&amp;\" + UrlEncode(\"https:\/\/api.twitter.com\/1\/statuses\/update.xml\");\n                signature_request += \"&amp;include_entities%3Dtrue%26\" + UrlEncode(MakeParamString(consumer_key, nonce, null, unixtime, access_token, null, tweet_data));\n                string signature = GetSignature(consumer_secret, access_secret, signature_request);\n\n                string header_param = \"OAuth oauth_consumer_key=\\\"\" + UrlEncode(consumer_key) + \"\\\",oauth_signature_method=\\\"HMAC-SHA1\\\",\" +\n                                      \"oauth_timestamp=\\\"\" + unixtime + \"\\\",oauth_nonce=\\\"\" + UrlEncode(nonce) + \"\\\",\" +\n                                      \"oauth_version=\\\"1.0\\\",oauth_token=\\\"\" + UrlEncode(access_token) + \"\\\",\" +\n                                      \"oauth_signature=\\\"\" + UrlEncode(signature) + \"\\\",\";\n\n                DebugParamOut(consumer_key, consumer_secret, nonce, signature, unixtime, access_token, access_secret, null);\n                Console.WriteLine(\"* Access : https:\/\/api.twitter.com\/1\/statuses\/update.xml\");\n                Console.WriteLine(\"* Tweet at : \" + tweet_text);\n\n                HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(\"https:\/\/api.twitter.com\/1\/statuses\/update.xml\");\n                hwr.Method = \"POST\";\n                hwr.ServicePoint.Expect100Continue = false;\n                hwr.Headers.Add(HttpRequestHeader.Authorization, header_param);\n                hwr.ContentType = \"application\/x-www-form-urlencoded\";\n                var s = new StreamWriter(hwr.GetRequestStream());\n                s.Write(\"status=\" + tweet_data + \"&amp;include_entities=true\");\n                s.Close();\n\n                WebResponse ret = hwr.GetResponse();\n                Console.WriteLine();\n                Console.WriteLine(\"Response:\");\n                Console.WriteLine(\"&gt; \"+(new StreamReader(ret.GetResponseStream()).ReadToEnd()));\n\n            }\n            #endregion\n        }\n\n        \/\/ UNIX \u6642\u9593\u3092\u8fd4\u3059\u3002\n        static long GetUNIXTime()\n        {\n            return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;\n        }\n\n        \/\/ URL\u30a8\u30f3\u30b3\u30fc\u30c9 (\u3069\u3046\u3084\u3089\u30a8\u30b9\u30b1\u30fc\u30d7\u6587\u5b57\u306f\u5927\u6587\u5b57\u306b\u3057\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u3089\u3057\u3044\u3002)\n        static string UrlEncode(string str)\n        {\n            string s = HttpUtility.UrlEncode(str);\n            return _UrlEncodeUpper(s);\n        }\n\n        static string _UrlEncodeUpper(string str)\n        {\n            int p = str.IndexOf(\"%\");\n            if (p != -1)\n            {\n                str = str.Substring(0, p) + str.Substring(p, 3).ToUpper() + _UrlEncodeUpper(str.Substring(p + 3));\n            }\n            return str;\n        }\n\n        \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u6587\u5b57\u5217\u3092\u751f\u6210\n        static string MakeParamString(string oauth_consumer_key, string oauth_nonce, string oauth_signature, long oauth_timestamp, string oauth_token, string oauth_verifier, string status)\n        {\n            string param = \"oauth_consumer_key=\" + oauth_consumer_key + \"&amp;oauth_nonce=\" + oauth_nonce;\n\n            if (oauth_signature != null)\n                param += \"&amp;oauth_signature=\" + oauth_signature;\n\n            param += \"&amp;oauth_signature_method=HMAC-SHA1\" + \"&amp;oauth_timestamp=\" + oauth_timestamp;\n\n            if (oauth_token != null)\n                param += \"&amp;oauth_token=\" + oauth_token;\n\n            if (oauth_verifier != null)\n                param += \"&amp;oauth_verifier=\" + oauth_verifier;\n            \n            param += \"&amp;oauth_version=1.0\";\n\n            if (status != null)\n                param += \"&amp;status=\" + status;\n\n            return param;\n        }\n\n        \/\/ Consumer Secret \u3092Key \u3068\u3057\u305f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u6587\u5b57\u5217\u306e\u30cf\u30c3\u30b7\u30e5\u3092\u6c42\u3081\u308b\u3002\n        static string GetSignature(string consumer_secret, string access_token_secret, string param)\n        {\n            HMACSHA1 hmacsha1 = new HMACSHA1();\n            hmacsha1.Key = Encoding.ASCII.GetBytes(consumer_secret + \"&amp;\" + access_token_secret);\n            byte[] hash = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(param));\n            \n            return Convert.ToBase64String(hash);\n        }\n\n        \/\/ \u3088\u304f\u3084\u308b\u51fa\u529b\u3092\u307e\u3068\u3081\u3066\u307f\u308b\u3002\n        static void DebugParamOut(string oauth_consumer_key, string oauth_consumer_secret, string oauth_nonce, string oauth_signature, long oauth_timestamp, string oauth_token, string oauth_token_secret, string oauth_verifier)\n        {\n            Console.WriteLine(\"- OAuth Consumer Key = \" + oauth_consumer_key);\n            Console.WriteLine(\"- OAuth Consumer Secret = \" + oauth_consumer_secret);\n            Console.WriteLine(\"- OAuth Nonce = \" + oauth_nonce);\n            if (oauth_signature != null)\n                Console.WriteLine(\"- OAuth Signature = \" + oauth_signature);\n            Console.WriteLine(\"- OAuth Time Stamp = \" + oauth_timestamp);\n            if (oauth_token != null)\n                Console.WriteLine(\"- OAuth Access Token = \" + oauth_token);\n            if (oauth_token_secret != null)\n                Console.WriteLine(\"- OAuth Access Token Secret = \" + oauth_token_secret);\n            if (oauth_verifier != null)\n                Console.WriteLine(\"- OAuth Verifier = \" + oauth_verifier);\n        }\n    }\n}\n<\/pre>\n<\/div>\n<p>&#160;<\/p>\n<p>\u3068\u308a\u3042\u3048\u305a\u3001\u8a18\u4e8b\u81ea\u4f53\u304c\u3080\u3061\u3083\u304f\u3061\u3083\u9577\u304f\u306a\u308b\u306e\u3067\u3001<br \/>\n  <br \/>\u89e3\u8aac\u4e91\u3005\u306f\u6b21\u306e\u8a18\u4e8b\u306b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u307f\u3080\u3089\u3067\u3059\u3002 \u3072\u3068\u307e\u305a\u3001\u304a\u3079\u3093\u304d\u3087\u30fc\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u5f8c\u304b\u3089\u3082\u5206\u304b\u308b\u3088\u3046\u306b\u3001 \u5909\u6570\u3092\u591a\u304f\u4f7f\u3063\u3066\u6587\u5b57\u5217\u51fa\u529b\u3092\u3075\u3093\u3060\u3093\u306b\u51fa\u3057\u306a\u304c\u3089\u3002 \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u3001\u6d77\u304b\u3089\u6765\u305f\u4fb5\u7565\u8005\u306b\u4fb5\u7565\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001 \u305d\u3093\u306a\u3082\u306e\u5168\u304f\u6c17\u306b\u3057\u306a\u3044\u3001\u3080\u3057\u308d\u3001\u4fb5\u7565 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,14,7],"tags":[103,106,107,108,104],"class_list":["post-3817","post","type-post","status-publish","format-standard","hentry","category-csharp","category-web","category-dev","tag-oauth-1-0","tag-twitter","tag-107","tag-108","tag-104"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/posts\/3817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/comments?post=3817"}],"version-history":[{"count":0,"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/posts\/3817\/revisions"}],"wp:attachment":[{"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/media?parent=3817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/categories?post=3817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mimumimu.net\/blog\/wp-json\/wp\/v2\/tags?post=3817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}