{"id":83,"date":"2017-08-31T19:46:35","date_gmt":"2017-08-31T10:46:35","guid":{"rendered":"http:\/\/mell0w-5phere.net\/jaded5phere\/2017\/08\/31\/2017-08-31-194635\/"},"modified":"2018-03-19T03:37:52","modified_gmt":"2018-03-18T18:37:52","slug":"twitter4j-oauth","status":"publish","type":"post","link":"https:\/\/mell0w-5phere.net\/jaded5phere\/2017\/08\/31\/twitter4j-oauth\/","title":{"rendered":"\u3010Android\u3011Twitter4j\u3067OAuth\u8a8d\u8a3c\u3092\u30a2\u30d7\u30ea\u5185\u3067\u5b8c\u7d50\u3055\u305b\u308b"},"content":{"rendered":"<p>\u3000\u3053\u306e\u3042\u3044\u3060\u30b3\u30df\u30b1\u3092\u6a5f\u306bAndroid\u7aef\u672b\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3067\u3069\u3046\u305b\u306a\u3089\u30a2\u30d7\u30ea\u3067\u3082\u4f5c\u3063\u305f\u308c\u3068\u601d\u3063\u3066Twitter\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u3063\u305f\u306e\u3067\u5099\u5fd8\u9332\u304c\u3066\u3089\u3002(\u5b9f\u6a5f\u30c6\u30b9\u30c8\u3088\u308a\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u306e\u307b\u3046\u304c\u697d\u3060\u3063\u305f\u3002)<\/p>\n<p>\u3000\u6b63\u76f4\u306a\u3068\u3053\u308diOS\u306fTheWorld\u3001Android\u306fMoonStrike\u3067\u7528\u304c\u8db3\u308a\u3066\u3057\u307e\u3046\u306e\u3067\u4f7f\u3044\u9053\u304c\u306a\u3044\u306e\u304c\u96e3\u70b9\u3002<\/p>\n<p>\u3000\u76db\u5927\u306b\u30cf\u30de\u3063\u305f\u306e\u306fOAuth\u8a8d\u8a3c\u304f\u3089\u3044\u3060\u304c\u7d30\u3005\u3068\u30cf\u30de\u3063\u305f\u3068\u3053\u308d\u3082\u5f8c\u304b\u3089\u66f8\u3044\u3066\u3044\u304f\u3002<\/p>\n<hr>\n<p>(\u30bd\u30fc\u30b91)<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">private RequestToken req;\r\nprivate OAuthAuthorization oauau;\r\n\r\nprivate String ck;\r\nprivate String cs;    \/\/...ConsumerKey\/Secret\u306f\u4e8b\u524d\u306b\u53d6\u5f97\u3057\u3066\u304a\u304f\r\nprivate String at;\r\nprivate String ats;\r\nfinal String CALLBACK=\"hoge\";\r\n\r\npublic void User_Oauth(){\r\n\toauau=new OAuthAuthorization(new ConfigurationBuilder()\r\n\t\t.setOAuthConsumerKey(ck)\r\n\t\t.setOAuthConsumerSecret(cs)\r\n\t\t.build());\r\n\toauau.setOAuthAccessToken(null);\r\n\tString url=\"\";\r\n\t\r\n\ttry {\r\n\t\tGetAuthURL g=new GetAuthURL(auau);\r\n\t\tg.execute(CALLBACK);\r\n\t\treq=g.get();\r\n\t\turl=req.getAuthorizationURL();\r\n\t}catch(Exception e){\r\n\t\turl=e.toString();\r\n\t}\r\n\t\r\n\tWebView wb=(WebView)findViewById(R.id.webview);\r\n\twb.setVisibility(View.VISIBLE);\r\n\twb.setWebViewClient(new WebViewClient(){\r\n\t\tString verifier=\"\";\r\n\t\t\r\n\t\tpublic void onPageFinished(WebView view,String url){\r\n\t\t\tsuper.onPageFinished(view,url);\r\n\t\t\t\r\n\t\t\tif(url!=null&amp;&amp;url.split(\"\\\\?\")[0].endsWith(CALLBACK)){\r\n\t\t\t\tString[] params=url.split(\"\\\\?\")[1].split(\"&amp;\");\r\n\t\t\t\t\r\n\t\t\t\tif(params[0].startsWith(\"oauth_verifier\")){\r\n\t\t\t\t\tverifier=params[0].split(\"=\")[1];\r\n\t\t\t\t}else if(params[1].startsWith(\"oauth_verifier\")){\r\n\t\t\t\t\tverifier=params[1].split(\"=\")[1];\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tgetAccessToken(verifier);\r\n\t\t\t\tview.setVisibility(GONE);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\twb.loadUrl(url);\r\n}\r\n\r\npublic void getAccessToken(String verifier){\r\n\ttry {\r\n\t\tGetAccessTokenAsync g=new GetAccessTokenAsync(req,oauau);\r\n\t\tg.execute(verifier);\r\n\t\tString[]keys=g.get();\r\n\t\tat=keys[0];\r\n\t\tats=keys[1];\r\n\t}catch(Exception e){\r\n\t\t\/\/\u4f8b\u5916\u51e6\u7406\r\n\t}\r\n}\r\n<\/code><\/pre>\n<p><\/p>\n<p>\u3000\u307e\u305a<code>OAuthAuthorization<\/code>\u306e\u5f15\u6570\u306b\u3001ConsumerKey(CK)\u3068ConsumerSecret(CS)\u3092\u30bb\u30c3\u30c8\u3057\u305f<code>ConfigurationBuilder<\/code>\u3092\u6e21\u3057\u3066\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3059\u308b(\u3053\u3053\u3067\u306foauau)...(14\u884c\u76ee)\u3002<\/p>\n<p>\u3000\u3053\u306e\u6642\u70b9\u3067\u306fAccessToken\u306f\u53d6\u5f97\u3057\u3066\u3044\u306a\u3044\u306e\u3067oauau\u306eAccessToken\u306bnull\u3092\u30bb\u30c3\u30c8\u3059\u308b(\u3057\u306a\u3044\u3068\u5f8c\u3067\u30a8\u30e9\u30fc\u306b\u306a\u308b)...(15\u884c\u76ee)\u3002<\/p>\n<p>\u3000\u6b21\u306b\u8a8d\u8a3c\u30da\u30fc\u30b8\u306eURL\u3092\u53d6\u5f97\u3059\u308b\u306e\u3060\u304c\u3001\u30e1\u30a4\u30f3\u30b9\u30ec\u30c3\u30c9\u3067\u53d6\u5f97\u3057\u3088\u3046\u3068\u3059\u308b\u3068NetworkOnMainThreadException\u306a\u308b\u4f8b\u5916\u304c\u8fd4\u3063\u3066\u304f\u308b\u3002\u8981\u3059\u308b\u306b\u30e1\u30a4\u30f3\u30b9\u30ec\u30c3\u30c9\u3067\u901a\u4fe1\u3059\u308b\u306a\u30ef\u30fc\u30ab\u30fc\u30b9\u30ec\u30c3\u30c9\u3067\u3084\u308c\u3001\u3068\u3044\u3046\u3053\u3068\u306a\u306e\u3067AsyncTask\u3092\u7d99\u627f\u3057\u305f\u30af\u30e9\u30b9\u3092\u81ea\u524d\u3067\u7528\u610f\u3057\u306a\u304f\u3066\u306f\u306a\u3089\u306a\u3044\u3002<\/p>\n<p>(\u30bd\u30fc\u30b92)<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">public class GetAuthURL extends AsyncTask&lt;String,Void,RequestToken&gt; {\r\n\tprivate OAuthAuthorization oauau;\r\n\t\r\n\tpublic GetAuthURL(OAuthAuthorization oauau){\r\n\t\tthis.oauau=oauau;\r\n\t}\r\n\t\r\n\tprotected RequestToken doInBackground(String... callback){\r\n\t\ttry{\r\n\t\t\tRequestToken req=oauau.getOAuthRequestToken(callback[0]);\r\n\t\t\treturn req;\r\n\t\t}catch(Exception e){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}<\/code><\/pre>\n<p>\u3000AsyncTask\u3092\u7d99\u627f\u3059\u308b\u3068\u304d<code>doInBackground<\/code>\u30e1\u30bd\u30c3\u30c9\u306b\u51e6\u7406\u3092\u66f8\u304d\u8fbc\u3080\u3002\u5f15\u6570\u306f\u53ef\u5909\u9577\u3060\u3002<\/p>\n<p>\u3000\u3053\u3053\u3067\u306f\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306boauau\u3092\u6e21\u3057\u3001\u305d\u308c\u3092\u4f7f\u3063\u3066getOAuthRequestToken\u3067RequestToken\u3092\u8fd4\u3057\u3066\u3044\u308b...(11\u884c\u76ee)\u3002<\/p>\n<p>\u3000\u3053\u3053\u3067CALLBACK\u306f\u4efb\u610f\u306e\u6587\u5b57\u5217\u3067\u3042\u308b(\u5f8c\u3067\u4f7f\u3046)\u3002<\/p>\n<p>\u3000\u8fd4\u3063\u3066\u304d\u305fRequestToken\u3092\u4f7f\u3063\u3066<code>getAuthorizationURL()<\/code>\u3067\u8a8d\u8a3cURL\u3092\u3081\u3067\u305f\u304f\u30b2\u30c3\u30c8...(\u30bd\u30fc\u30b91\u306e22\u884c\u76ee)\u3002\u6b21\u306fWebView\u3067\u30a2\u30d7\u30ea\u306b\u4f7f\u7528\u8a31\u53ef\u3092\u51fa\u3059\u3002<\/p>\n<p>\u3000WebViewClient\u306e<code>onPageFinished<\/code>(\u30da\u30fc\u30b8\u8aad\u307f\u8fbc\u307f\u304c\u7d42\u308f\u308b\u3068\u547c\u3073\u51fa\u3055\u308c\u308b)\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3057\u3066\u3001\u8a8d\u8a3c\u5f8c\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308bURL\u306b\u3055\u3063\u304d\u306eCALLBACK\u304c\u542b\u307e\u308c\u3066\u3044\u308c\u3070\u8a8d\u8a3c\u6210\u529f\u3068\u3044\u3046\u3088\u3046\u306b\u5224\u5b9a\u3059\u308b\u3002<\/p>\n<p>\u3000\u5b9f\u969b\u306eURL\u306f<\/p>\n<blockquote><p>\nhttps:\/\/api.twitter.com\/oauth\/(CALLBACK)?oauth_token=(...)&oauth_verifier=(...)\n<\/p><\/blockquote>\n<p>\u3068\u3044\u3046\u5f62\u3067\u8fd4\u3063\u3066\u304f\u308b\u306e\u3067\u3001\u307e\u305aURL\u3092?\u3067\u533a\u5207\u308b(\u6b63\u898f\u8868\u73fe\u306e\u8a18\u53f7\u306a\u306e\u3067<code>\"?\"<\/code>\u306f\\\\\u3067\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u305b\u308b)\u3002<\/p>\n<p>\u3000\u305d\u3057\u3066\u524d\u534a\u90e8\u5206\u304cCALLBACK\u3067\u7d42\u308f\u3063\u3066\u3044\u308b\u3068\u304d\u3001\u5f8c\u534a\u90e8\u5206\u3092&amp;\u3067\u533a\u5207\u3063\u3066oauth_verifier\u3092\u53d6\u5f97\u3059\u308b...(\u30bd\u30fc\u30b91\u306e41\u884c\u76ee)\u3002<\/p>\n<p>\u3000\u3053\u3053\u307e\u3067\u6765\u308c\u3070\u3042\u3068\u306fAccessToken\u53d6\u5f97\u3092\u6b8b\u3059\u306e\u307f\u3067\u3042\u308b\u3002\u3053\u308c\u3082AsyncTask\u3092\u4f7f\u308f\u306a\u3044\u3068\u4f8b\u5916\u3092\u6295\u3052\u3089\u308c\u308b\u306e\u3067\u9069\u5f53\u306b\u30af\u30e9\u30b9\u3092\u4f5c\u308b\u3002<\/p>\n<p>(\u30bd\u30fc\u30b93)<\/p>\n<pre class=\"line-numbers\"><code class=\"language-java\">public class GetAccessTokenAsync extends AsyncTask&lt;String,Void,String[]&gt;{\r\n\tprivate RequestToken req;\r\n\tprivate OAuthAuthorization oauau;\r\n\t\r\n\tpublic GetAccessTokenAsync(RequestToken req, OAuthAuthorization auau){\r\n\t\tthis.req=req;\r\n\t\tthis.oauau=oauau;\r\n\t}\r\n\t\r\n\tprotected String[] doInBackground(String... verifier){\r\n\t\ttry{\r\n\t\t\tAccessToken ac=oauau.getOAuthAccessToken(req,verifier[0]);\r\n\t\t\treturn new  String[]{ac.getToken(),ac.getTokenSecret()};\r\n\t\t}catch(Exception e){\r\n\t\t\treturn new String[]{e.toString()};\r\n\t\t}\r\n\t}\r\n}\r\n<\/code><\/pre>\n<p>\u3000oauau\u306bRequestToken\u3068verifier\u3092\u6e21\u3057\u3066AccessToken\u3092\u751f\u6210\u3057\u3001AccessToken\u3068AccessTokenSecret\u304c\u53d6\u5f97\u3067\u304d\u308b...(13\u884c\u76ee)\u3002<\/p>\n<p>\u3000\u3053\u308c\u3067CK\u3001CS\u3001AccessToken\u3001AccessTokenSecret\u304c\u3059\u3079\u3066\u63c3\u3063\u305f\u306e\u3067\u6674\u308c\u3066OAuth\u8a8d\u8a3c\u6210\u529f\u3068\u306a\u308b\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u3000\u4e00\u9023\u306e\u6d41\u308c\u3068\u3057\u3066\u306f<\/p>\n<ul>\n<li>CK\u3068CS\u304b\u3089oauau\u3092\u751f\u6210<\/li>\n<li>oauau\u3067RequestToken\u3092\u751f\u6210<\/li>\n<li>RequestToken\u304b\u3089\u8a8d\u8a3cURL\u3092\u751f\u6210\u3057\u3001\u6a29\u9650\u3092\u627f\u8a8d<\/li>\n<li>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u306eURL\u304b\u3089Verifier\u3092\u53d6\u5f97<\/li>\n<li>RequestToken\u3068Verifier\u304b\u3089AccessToken\u3092\u751f\u6210<\/li>\n<li>CK\u3001CS\u3001AccessToken\u3001AccessTokenSecret\u3092\u4f7f\u3063\u3066\u6a29\u9650\u3092\u4f7f\u7528<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u5f62\u306b\u306a\u308b\u3002\u30e1\u30f3\u30c9\u30af\u30bb\u30a8\u2026<\/p>\n<p>\u3000\u3068\u3082\u304b\u304f\u3053\u308c\u3060\u3051\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u8e0f\u307e\u306a\u3044\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306f\u5b88\u308c\u306a\u3044\u3093\u3067\u3059\u306d(\u767d\u76ee)\u3002<\/p>\n<hr>\n<p>\u304a\u308f\u308a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3000\u3053\u306e\u3042\u3044\u3060\u30b3\u30df\u30b1\u3092\u6a5f\u306bAndroid\u7aef\u672b\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3067\u3069\u3046\u305b\u306a\u3089\u30a2\u30d7\u30ea\u3067\u3082\u4f5c\u3063\u305f\u308c\u3068\u601d\u3063\u3066Twitter\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u3063\u305f\u306e\u3067\u5099\u5fd8\u9332\u304c\u3066\u3089\u3002(\u5b9f\u6a5f\u30c6\u30b9\u30c8\u3088\u308a\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u306e\u307b\u3046\u304c\u697d\u3060\u3063\u305f\u3002) \u3000\u6b63\u76f4\u306a\u3068\u3053\u308diOS\u306f<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[16,15,19,17,18],"_links":{"self":[{"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/posts\/83"}],"collection":[{"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":2,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/posts\/83\/revisions"}],"predecessor-version":[{"id":128,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/posts\/83\/revisions\/128"}],"wp:attachment":[{"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/media?parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/categories?post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mell0w-5phere.net\/jaded5phere\/wp-json\/wp\/v2\/tags?post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}