AndroidStudioでTwitter4jとAPIキーを使ってツイートを投稿する【Java】【初心者向け】

※初心者向けの記事です。

はじめに

 java、AndroidStudio共に初心者です。記事の中に間違っている発言などあるかもしれませんがご了承ください。。初心者なりになるべく丁寧に書いていきます。

事前準備

事前準備としてTwitterでDeveloperアカウント登録をしAPIキーを取得してください。

「Twitter APIキー取得」

とかで検索すると参考になる分かりやすい記事がたくさん見つかると思うのでこの記事では省略します。


AndroidStudioにTwitter4jを導入

①まずTwitter4j公式サイトからzipファイルをダウンロード

http://twitter4j.org/ja/index.html

無題

②AndroidStudioの表示を「Android」から「Project」に変更する

無題2

③①でダウンロードしたzipファイルを展開

④libフォルダの中の「twitter4j-core-*.*.*.jar」をAndroidStudioの「libs」へドラッグ&ドロップ

無題2

無題2

⑤AndroidStudioで「Build → Edit Libraries and Dependencies...」を開く

無題

⑥project Structureが開くので「Dependency」の「+」から「Jar Dependency」を選択。「Add Jar/Aar Dependency」が開かれる。

無題

⑦step1が「libs¥twitter4j-core-*.*.*.jar」
step2が「implementation」になっていることを確認しOKをクリック

無題2

⑧「Apply」を押してから「OK」をクリック

これでAndroidStudioにTwitter4jが導入できました。

「app/build.gradle」から確認することができます。

dependencies {
    //省略
   implementation files('libs\\twitter4j-core-4.0.7.jar')
   //省略
}


ツイートを投稿する

プロパティファイルを使う方法を説明します。

参考:【初心者向け】Android×KotlinでTwitter4Jを使ってみる

①「app/src/main」で右クリック。
「New→Directory」を選択して「resources」というフォルダを作成。

無題

②「resources」で右クリック。
「New→File」を選択して「twitter4j.properties」というファイルを作成。

無題2

最終的に↓のようになっています。

無題

③「twitter4j.properties」にAPIキーをセット。

↓をtwitter4j.propertiesにコピペして右側に「APIkey(consumerKey)」「APISecretkey(consumerSecret)」「AccessToken」「TokenSecret」をセットしてください。

debug=true
oauth.consumerKey=XXXXXXXXXXXXXXXX
oauth.consumerSecret=XXXXXXXXXXXXXXXXXX
oauth.accessToken=XXXXXXXXXXXXXXXX
oauth.accessTokenSecret=XXXXXXXXXXXXXXXX

④パーミッションの設定

Android上でインターネット接続をするためにパーミッションの設定を行います。

app/src/main/AndroidManifest.xml
を開いて以下を記述してください。

<uses-permission android:name="android.permission.INTERNET" />

参考:Android でインターネットに接続するためのパーミッションを設定する

⑤ツイートサンプルプログラム

ボタンを押すと予めセットしておいた文字列をツイートする最低限のプログラムを作成していきます。

ツイートする、ツイートを取得するといったネットワーク通信を行う場合、Mainスレッドとは別で非同期処理を行う必要があるようです。

今回は「MainActivity.java」と別に「AsyncTask.java」という非同期処理(ツイート)を行うためのアクティビティを作成しました。

参考:Twitter4Jでユーザフォロー時にandroid.os.NetworkOnMainThreadExceptionが発生した場合の対処法


MainActivity.java

public class MainActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       Intent intent = new Intent(MainActivity.this,AsyncTask.class);
       startActivity(intent);//AsyncTask.javaへ
   }
}
Intent intent = new Intent(MainActivity.this,AsyncTask.class);
startActivity(intent);

この2行でアプリを起動した瞬間に非同期処理を行うアクティビティ(AsyncTask.java)を実行するようにしています。


AsyncTask.java

ツイートを送信するためのボタンを一つレイアウトに配置しています。

public class AsyncTask extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_async_task);
      Button nextButton = (Button)findViewById(R.id.button);
      nextButton.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
              android.os.AsyncTask<Void,Void,String> task
                      = new android.os.AsyncTask<Void, Void, String>(){
                  @Override
                  protected String doInBackground(Void... params) {
                      String word = "テストツイート!";
                      Twitter twitter = TwitterFactory.getSingleton();
                      try {
                          twitter4j.Status status
                                  = twitter.updateStatus(word);
                          Uri uri = Uri.parse("https://twitter.com/**");
                          Intent i = new Intent(Intent.ACTION_VIEW,uri);
                          startActivity(i);
                      } catch (TwitterException e) {
                          e.printStackTrace();
                      }
                      return null;
                  }
              };
              task.execute();
          }
      });
  }
}
protected String doInBackground(Void... params) {
    String word = "テストツイート!";
    Twitter twitter = TwitterFactory.getSingleton();
    try {
        twitter4j.Status status = twitter.updateStatus(word);
        Uri uri = Uri.parse("https://twitter.com/***");
        Intent i = new Intent(Intent.ACTION_VIEW,uri);
        startActivity(i);
    } catch (TwitterException e) {
        e.printStackTrace();
    }
    return null;
}

doInBackground()の中に非同期で処理したい内容を記述しています。

・wordという変数に文字列をセットし、Twitter.updateStatus() メソッドでツイートしています。

・ツイートができているか確認用に、ブラウザが自動で開きTwitterプロフィールを確認できるようにしています。
※「"https://twitter.com/***"」の***の部分をAPIキーをセットしたTwitterアカウントのIDに変更してください。

これで完成です。

【参考】
[Android] 非同期処理 AsyncTaskの使い方
Androidでの非同期処理の8つの方法
Activityから非同期(スレッド)処理へデータを渡す

おわりに

これだけできたら後はユーザーから入力を受け取った文字列をツイートするなど色々応用できると思います。
実際に僕はアプリ内でプレイしたゲームのスコアとプレイヤー名をツイートするbotを作成し使用しました。

別でOAuth認証にもチャレンジしたのですが、認証までは上手くいくけどツイートやタイムラインを取得する、といったことを行うと「asynctask #1」というエラーがでてしまい治すことができませんでした。。(サーバーとの通信でクラッシュ?しているとかなんとか、分からん)

今どきAndroidStudioからAPIキーを使ってツイートしたい人がいるのか分かりませんが、、少しでも需要があると信じ記事として残しておきます。

記事中に間違った発言などあればtwitterで教えてください。
逆に成功したよーって報告もあれば是非お願いしますー。

ではでは。。。

よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただいております!