質問編集履歴

3 ソースのコメントを変更

homhom

homhom score 8

2017/12/02 08:07  投稿

[java] Twitter Api リクエストトークンが取得できない(ステータスコード401)
###前提・実現したいこと
プログラミング初心者です。
javaでtwitterのapiを利用したいと思い、アクセストークンを取得するためにリクエストトークンを取得しようとしているのですが、ステータスコード401で例外に飛ばされてしまいます。
[ココ](https://syncer.jp/Web/API/Twitter/REST_API/#access_token)と[oauth1.0日本語ガイド](https://openid-foundation-japan.github.io/draft-hammer-oauth-10.html)と[Twitter公式サイト](https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature)を見ながら書いてみました。
コードが汚くて申し訳ないです(例外処理は特に申し訳ないです・・・)
print文に"@"を入れているのは"スペース"が気になったからです。
#聞きたいこと・教えてほしいこと
このソースのどこに原因があるか、またその解決策を教えて頂きたいです。
###該当のソースコード:
```java
import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test{
   static final String consumer_key = "cuYoYMQQUo5rswmietK4VzW4q";//仮です(存在しません)
   static final String consumer_key = "cuYoYMQQUo5rswmietK4VzW4q";//実行時にはちゃんと存在していたkeyとsecretです。
   static final String consumer_secret = "hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6";
   
   static final String oauth_callback = "https://www.google.co.jp/";
   
   static final String access_token_secret = "";
   
   static final String request_method = "POST";
   
   static final String request_url = "https://api.twitter.com/oauth/request_token";
   
   static final Map<String,String> parameter = new TreeMap<String,String>();
   
   public static void main(String arg[]){
       //まず必要なパラメータを入れる(signatureは後から入れる)
       parameter.put("oauth_callback",oauth_callback);
       parameter.put("oauth_consumer_key",consumer_key);
       parameter.put("oauth_signature_method","HMAC-SHA1");
       parameter.put("oauth_timestamp",String.valueOf(System.currentTimeMillis() / 1000L));
       parameter.put("oauth_nonce",String.valueOf(Math.random()));
       parameter.put("oauth_version","1.0");
       //signatureを作成して入れる
       parameter.put("oauth_signature",getSignature(getKey(),getData()));
       
       //上記で作成したパラメータを元に、httpヘッダ部分に追加する"Authorization"を作成
       StringBuilder authorization = new StringBuilder();
       authorization.append("OAuth ");
       for(Map.Entry<String,String> aut : parameter.entrySet()){
           authorization.append(encode(aut.getKey()));
           authorization.append("=");
           authorization.append("\"");
           authorization.append(encode(aut.getValue()));
           authorization.append("\"");
           authorization.append(", ");//スペース有
       }
       authorization.deleteCharAt(authorization.length()-1);
       authorization.deleteCharAt(authorization.length()-1);
       System.out.println("\n----------------------Authorizationー-----------------------\n@" + authorization.toString() + "@\n");
       
       //リクエストトークンを取得する
       try{
           URL url = new URL(request_url);
           HttpURLConnection con = (HttpURLConnection) url.openConnection();
           con.setRequestMethod(request_method);
           con.setDoInput(true);
           con.setRequestProperty("Authorization",authorization.toString());
           con.connect();
           BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
           try{
               String str;
               while((str = reader.readLine()) != null){
                   System.out.println(str);
               }
               con.disconnect();
               reader.close();
           }catch(Exception e){
               e.printStackTrace();
               reader.close();
           }
       }catch(Exception e){
           e.printStackTrace();
       }
   }
   
   //HMAC-SHA1変換で使用するキーを作成
   public static String getKey(){
       String key = encode(consumer_secret) + "&" + encode(access_token_secret);
       System.out.println("\n----------------------キー-----------------------\n@" + key + "@");
       return key;
   }
   
   //HMAC-SHA1変換で変化するデータを作成
   public static String getData(){
       StringBuilder stData = new StringBuilder();
       for(Map.Entry<String,String> param : parameter.entrySet()){
           stData.append("&");
           stData.append(encode(param.getKey()));
           stData.append("=");
           stData.append(encode(param.getValue()));
       }
       stData.deleteCharAt(0);
       String data = encode(request_method) + "&" + encode(request_url) + "&" + encode(stData.toString());
       System.out.println("\n----------------------データ-----------------------\n@" + data + "@");
       return data;
   }
   
   //作成したキーとデータを元にHMAC-SHA1 ーー> BASE64の順に変換してsignatureを作成
   public static String getSignature(String key,String data){
       try{
           SecretKeySpec sk = new SecretKeySpec(key.getBytes(),"HmacSHA1");
           Mac mac = Mac.getInstance("HmacSHA1");
           mac.init(sk);
           byte[] digest = mac.doFinal(data.getBytes());
           String signature = Base64.getEncoder().encodeToString(digest);
           System.out.println("\n----------------------signature-----------------------\n@" + signature + "@");
           return signature;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
   
   public static String encode(String str){
       try{
           String encodedStr = URLEncoder.encode(str,"UTF-8");
       
           encodedStr = encodedStr.replace("*","%2a");
           encodedStr = encodedStr.replace("-","%2d");
           encodedStr = encodedStr.replace("+","%20");
           
           return encodedStr;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
}
```
###コマンドプロンプト
```
>java Test
----------------------キー-----------------------
@hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6&@
----------------------データ-----------------------
@POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhtt
ps%253A%252F%252Fwww.google.co.jp%252F%26oauth_consumer_key%3DcuYoYMQQUo5rswmiet
K4VzW4q%26oauth_nonce%3D0.8824818570386344%26oauth_signature_method%3DHMAC%252dS
HA1%26oauth_timestamp%3D1512149214%26oauth_version%3D1.0@
----------------------signature-----------------------
@TWNYJMy8kRE2kKelAzajo9pf4yo=@
----------------------Authorizationー-----------------------
@OAuth oauth_callback="https%3A%2F%2Fwww.google.co.jp%2F", oauth_consumer_key="c
uYoYMQQUo5rswmietK4VzW4q", oauth_nonce="0.8824818570386344", oauth_signature="TW
NYJMy8kRE2kKelAzajo9pf4yo%3D", oauth_signature_method="HMAC%2dSHA1", oauth_times
tamp="1512149214", oauth_version="1.0"@
java.io.IOException: Server returned HTTP response code: 401 for URL: https://ap
i.twitter.com/oauth/request_token
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0
(HttpURLConnection.java:1895)
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(
HttpURLConnection.java:1491)
       at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputS
tream(HttpsURLConnectionImpl.java:236)
       at Test.main(Test.java:61)
```
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Twitter

    1487 questions

    Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

  • API

    3763 questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

2 誤字の訂正

homhom

homhom score 8

2017/12/02 04:21  投稿

[java] Twitter Api リクエストトークンが取得できない(ステータスコード401)
###前提・実現したいこと
プログラミング初心者です。
javaでtwitterのapiを利用したいと思い、アクセストークンを取得するためにリクエストトークンを取得しようとしているのですが、ステータスコード401で例外に飛ばされてしまいます。
[ココ](https://syncer.jp/Web/API/Twitter/REST_API/#access_token)と[oauth1.0日本語ガイド](https://openid-foundation-japan.github.io/draft-hammer-oauth-10.html)と[Twitter公式サイト](https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature)を見ながら書いてみました。
コードが汚くて申し訳ないです(例外処理は特に申し訳ないです・・・)
print文に"@"を入れているのは"スペース"が気になったからです。
#聞きたいこと・教えてほしいこと
このソースのどこに原因があるか、またその解決策を教えて頂きたいです。
###該当のソースコード:
```java
import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test{
   static final String consumer_key = "cuYoYMQQUo5rswmietK4VzW4q";
   static final String consumer_key = "cuYoYMQQUo5rswmietK4VzW4q";//仮です(存在しません)
   static final String consumer_secret = "hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6";
   
   static final String oauth_callback = "https://www.google.co.jp/";
   
   static final String access_token_secret = "";
   
   static final String request_method = "POST";
   
   static final String request_url = "https://api.twitter.com/oauth/request_token";
   
   static final Map<String,String> parameter = new TreeMap<String,String>();
   
   public static void main(String arg[]){
       //まず必要なパラメータを入れる(signatureは後から入れる)
       parameter.put("oauth_callback",oauth_callback);
       parameter.put("oauth_consumer_key",consumer_key);
       parameter.put("oauth_signature_method","HMAC-SHA1");
       parameter.put("oauth_timestamp",String.valueOf(System.currentTimeMillis() / 1000L));
       parameter.put("oauth_nonce",String.valueOf(Math.random()));
       parameter.put("oauth_version","1.0");
       //signatureを作成して入れる
       parameter.put("oauth_signature",getSignature(getKey(),getData()));
       
       //上記で作成したパラメータを元に、httpヘッダ部分に追加する"Authorization"を作成
       StringBuilder authorization = new StringBuilder();
       authorization.append("OAuth ");
       for(Map.Entry<String,String> aut : parameter.entrySet()){
           authorization.append(encode(aut.getKey()));
           authorization.append("=");
           authorization.append("\"");
           authorization.append(encode(aut.getValue()));
           authorization.append("\"");
           authorization.append(", ");//スペース有
       }
       authorization.deleteCharAt(authorization.length()-1);
       authorization.deleteCharAt(authorization.length()-1);
       System.out.println("\n----------------------Authorizationー-----------------------\n@" + authorization.toString() + "@\n");
       
       //リクエストトークンを取得する
       try{
           URL url = new URL(request_url);
           HttpURLConnection con = (HttpURLConnection) url.openConnection();
           con.setRequestMethod(request_method);
           con.setDoInput(true);
           con.setRequestProperty("Authorization",authorization.toString());
           con.connect();
           BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
           try{
               String str;
               while((str = reader.readLine()) != null){
                   System.out.println(str);
               }
               con.disconnect();
               reader.close();
           }catch(Exception e){
               e.printStackTrace();
               reader.close();
           }
       }catch(Exception e){
           e.printStackTrace();
       }
   }
   
   //HMAC-SHA1変換で使用するキーを作成
   public static String getKey(){
       String key = encode(consumer_secret) + "&" + encode(access_token_secret);
       System.out.println("\n----------------------キー-----------------------\n@" + key + "@");
       return key;
   }
   
   //HMAC-SHA1変換で変化するデータを作成
   public static String getData(){
       StringBuilder stData = new StringBuilder();
       for(Map.Entry<String,String> param : parameter.entrySet()){
           stData.append("&");
           stData.append(encode(param.getKey()));
           stData.append("=");
           stData.append(encode(param.getValue()));
       }
       stData.deleteCharAt(0);
       String data = encode(request_method) + "&" + encode(request_url) + "&" + encode(stData.toString());
       System.out.println("\n----------------------データ-----------------------\n@" + data + "@");
       return data;
   }
   
   //作成したキーとデータを元にHMAC-SHA1 ーー> BASE64の順に変換してsignatureを作成
   public static String getSignature(String key,String data){
       try{
           SecretKeySpec sk = new SecretKeySpec(key.getBytes(),"HmacSHA1");
           Mac mac = Mac.getInstance("HmacSHA1");
           mac.init(sk);
           byte[] digest = mac.doFinal(data.getBytes());
           String signature = Base64.getEncoder().encodeToString(digest);
           System.out.println("\n----------------------signature-----------------------\n@" + signature + "@");
           return signature;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
   
   public static String encode(String str){
       try{
           String encodedStr = URLEncoder.encode(str,"UTF-8");
       
           encodedStr = encodedStr.replace("*","%2a");
           encodedStr = encodedStr.replace("-","%2d");
           encodedStr = encodedStr.replace("+","%20");
           
           return encodedStr;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
}
```
###コマンドプロンプト
```
>java Test
----------------------キー-----------------------
@hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6&@
----------------------データ-----------------------
@POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhtt
ps%253A%252F%252Fwww.google.co.jp%252F%26oauth_consumer_key%3DcuYoYMQQUo5rswmiet
K4VzW4q%26oauth_nonce%3D0.8824818570386344%26oauth_signature_method%3DHMAC%252dS
HA1%26oauth_timestamp%3D1512149214%26oauth_version%3D1.0@
----------------------signature-----------------------
@TWNYJMy8kRE2kKelAzajo9pf4yo=@
----------------------Authorizationー-----------------------
@OAuth oauth_callback="https%3A%2F%2Fwww.google.co.jp%2F", oauth_consumer_key="c
uYoYMQQUo5rswmietK4VzW4q", oauth_nonce="0.8824818570386344", oauth_signature="TW
NYJMy8kRE2kKelAzajo9pf4yo%3D", oauth_signature_method="HMAC%2dSHA1", oauth_times
tamp="1512149214", oauth_version="1.0"@
java.io.IOException: Server returned HTTP response code: 401 for URL: https://ap
i.twitter.com/oauth/request_token
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0
(HttpURLConnection.java:1895)
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(
HttpURLConnection.java:1491)
       at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputS
tream(HttpsURLConnectionImpl.java:236)
       at Test.main(Test.java:61)
```
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Twitter

    1487 questions

    Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

  • API

    3763 questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1 質問を追記

homhom

homhom score 8

2017/12/02 04:17  投稿

[java] Twitter Api リクエストトークンが取得できない(ステータスコード401)
###前提・実現したいこと
プログラミング初心者です。
javaでtwitterのapiを利用したいと思い、アクセストークンを取得するためにリクエストトークンを取得しようとしているのですが、ステータスコード401で例外に飛ばされてしまいます。
[ココ](https://syncer.jp/Web/API/Twitter/REST_API/#access_token)と[oauth1.0日本語ガイド](https://openid-foundation-japan.github.io/draft-hammer-oauth-10.html)と[Twitter公式サイト](https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature)を見ながら書いてみました。
コードが汚くて申し訳ないです(例外処理は特に申し訳ないです・・・)
print文に"@"を入れているのは"スペース"が気になったからです。
 
#聞きたいこと・教えてほしいこと  
このソースのどこに原因があるか、またその解決策を教えて頂きたいです。  
###該当のソースコード:
```java
import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test{
   static final String consumer_key = "cuYoYMQQUo5rswmietK4VzW4q";
   static final String consumer_secret = "hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6";
   
   static final String oauth_callback = "https://www.google.co.jp/";
   
   static final String access_token_secret = "";
   
   static final String request_method = "POST";
   
   static final String request_url = "https://api.twitter.com/oauth/request_token";
   
   static final Map<String,String> parameter = new TreeMap<String,String>();
   
   public static void main(String arg[]){
       //まず必要なパラメータを入れる(signatureは後から入れる)
       parameter.put("oauth_callback",oauth_callback);
       parameter.put("oauth_consumer_key",consumer_key);
       parameter.put("oauth_signature_method","HMAC-SHA1");
       parameter.put("oauth_timestamp",String.valueOf(System.currentTimeMillis() / 1000L));
       parameter.put("oauth_nonce",String.valueOf(Math.random()));
       parameter.put("oauth_version","1.0");
       //signatureを作成して入れる
       parameter.put("oauth_signature",getSignature(getKey(),getData()));
       
       //上記で作成したパラメータを元に、httpヘッダ部分に追加する"Authorization"を作成
       StringBuilder authorization = new StringBuilder();
       authorization.append("OAuth ");
       for(Map.Entry<String,String> aut : parameter.entrySet()){
           authorization.append(encode(aut.getKey()));
           authorization.append("=");
           authorization.append("\"");
           authorization.append(encode(aut.getValue()));
           authorization.append("\"");
           authorization.append(", ");//スペース有
       }
       authorization.deleteCharAt(authorization.length()-1);
       authorization.deleteCharAt(authorization.length()-1);
       System.out.println("\n----------------------Authorizationー-----------------------\n@" + authorization.toString() + "@\n");
       
       //リクエストトークンを取得する
       try{
           URL url = new URL(request_url);
           HttpURLConnection con = (HttpURLConnection) url.openConnection();
           con.setRequestMethod(request_method);
           con.setDoInput(true);
           con.setRequestProperty("Authorization",authorization.toString());
           con.connect();
           BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
           try{
               String str;
               while((str = reader.readLine()) != null){
                   System.out.println(str);
               }
               con.disconnect();
               reader.close();
           }catch(Exception e){
               e.printStackTrace();
               reader.close();
           }
       }catch(Exception e){
           e.printStackTrace();
       }
   }
   
   //HMAC-SHA1変換で使用するキーを作成
   public static String getKey(){
       String key = encode(consumer_secret) + "&" + encode(access_token_secret);
       System.out.println("\n----------------------キー-----------------------\n@" + key + "@");
       return key;
   }
   
   //HMAC-SHA1変換で変化するデータを作成
   public static String getData(){
       StringBuilder stData = new StringBuilder();
       for(Map.Entry<String,String> param : parameter.entrySet()){
           stData.append("&");
           stData.append(encode(param.getKey()));
           stData.append("=");
           stData.append(encode(param.getValue()));
       }
       stData.deleteCharAt(0);
       String data = encode(request_method) + "&" + encode(request_url) + "&" + encode(stData.toString());
       System.out.println("\n----------------------データ-----------------------\n@" + data + "@");
       return data;
   }
   
   //作成したキーとデータを元にHMAC-SHA1 ーー> BASE64の順に変換してsignatureを作成
   public static String getSignature(String key,String data){
       try{
           SecretKeySpec sk = new SecretKeySpec(key.getBytes(),"HmacSHA1");
           Mac mac = Mac.getInstance("HmacSHA1");
           mac.init(sk);
           byte[] digest = mac.doFinal(data.getBytes());
           String signature = Base64.getEncoder().encodeToString(digest);
           System.out.println("\n----------------------signature-----------------------\n@" + signature + "@");
           return signature;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
   
   public static String encode(String str){
       try{
           String encodedStr = URLEncoder.encode(str,"UTF-8");
       
           encodedStr = encodedStr.replace("*","%2a");
           encodedStr = encodedStr.replace("-","%2d");
           encodedStr = encodedStr.replace("+","%20");
           
           return encodedStr;
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
   }
}
```
###コマンドプロンプト
```
>java Test
----------------------キー-----------------------
@hxbhMUgi0fQ0aLdL5FEKnEDY31CxqXdru32RAoFNBq2B71Uyf6&@
----------------------データ-----------------------
@POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhtt
ps%253A%252F%252Fwww.google.co.jp%252F%26oauth_consumer_key%3DcuYoYMQQUo5rswmiet
K4VzW4q%26oauth_nonce%3D0.8824818570386344%26oauth_signature_method%3DHMAC%252dS
HA1%26oauth_timestamp%3D1512149214%26oauth_version%3D1.0@
----------------------signature-----------------------
@TWNYJMy8kRE2kKelAzajo9pf4yo=@
----------------------Authorizationー-----------------------
@OAuth oauth_callback="https%3A%2F%2Fwww.google.co.jp%2F", oauth_consumer_key="c
uYoYMQQUo5rswmietK4VzW4q", oauth_nonce="0.8824818570386344", oauth_signature="TW
NYJMy8kRE2kKelAzajo9pf4yo%3D", oauth_signature_method="HMAC%2dSHA1", oauth_times
tamp="1512149214", oauth_version="1.0"@
java.io.IOException: Server returned HTTP response code: 401 for URL: https://ap
i.twitter.com/oauth/request_token
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0
(HttpURLConnection.java:1895)
       at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(
HttpURLConnection.java:1491)
       at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputS
tream(HttpsURLConnectionImpl.java:236)
       at Test.main(Test.java:61)
```
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Twitter

    1487 questions

    Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

  • API

    3763 questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る