Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Twitter APIライブラリ(Twitter4j)を用いてDMを送信する方法

投稿日:2021年4月15日 更新日:

<目次>

(1) Twitter APIライブラリ(Twitter4j)を用いてDMを送信する方法
 (1-1) 構文
 (1-2) 開発者用アカウントの設定変更
 (1-3) 認証トークンの再生成
 (1-4) サンプルプログラム

(1) Twitter APIライブラリ(Twitter4j)を用いてDMを送信する方法

(1-1) 構文

DMを送信するにはTwitter4jのDirectMessageクラスのsendDirectMessageクラスを使います。

DirectMessage dm = twitter.sendDirectMessage(reciever, message);

sendDirectMessageクラスの引数は次の通りです。

(表)

reciever DM受信者を指定します。long型(ID)とString型(ユーザーID)の2パターンの指定が可能です。

①long型の場合
DM受信者のIDを指定。

②String型の場合
DM受信者のユーザーIDを指定。
(「@XXXX」のXXXXの部分)

message String型で相手に送るメッセージを指定します。

目次にもどる

(1-2) 開発者用アカウントの設定変更

開発者用アカウントの設定によっては、次のようなエラーが出る事があり、このメッセージが出た場合はアカウントの設定変更が必要となります。

●エラーメッセージ

#### DM送信処理開始 ####
403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - This application is not allowed to access or delete your direct messages.
code - 93

Relevant discussions can be found on the Internet at:
        http://www.google.co.jp/search?q=796590e6 or
        http://www.google.co.jp/search?q=802fbd73
TwitterException{exceptionCode=[796590e6-802fbd73], statusCode=403, message=This application is not allowed to access or delete your direct messages., code=93, retryAfter=-1, rateLimitStatus=null, version=4.0.7}#### フォロに失敗しました: 403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - This application is not allowed to access or delete your direct messages.
code - 93

        at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:170)
        at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
        at twitter4j.HttpClientBase.post(HttpClientBase.java:86)
        at twitter4j.TwitterImpl.post(TwitterImpl.java:2138)
        at twitter4j.TwitterImpl.sendDirectMessage(TwitterImpl.java:577)
        at twitter4j.TwitterImpl.sendDirectMessage(TwitterImpl.java:611)
        at twitter4j.TwitterImpl.sendDirectMessage(TwitterImpl.java:616)
        at twitterapi_test.SendDirectMessage.main(SendDirectMessage.java:36)

(図121)

●原因

このエラーが出る原因は開発者用アカウントの権限が不足しているためなので、ログインして権限の設定を変更する必要があります。
 
(参考)

エラーコード93を調べるとTwitterの公式ページにも原因の説明が書かれています。

(図122)

●対処

権限設定の変更手順をご紹介します。
 
①開発者用アカウントにログイン
 
・下記の開発者用ページを開き、右上のSign Inからサインインをします。
 
(図123)

(図124)

・ログインできたら、再度下記のURLを訪問すると、今度はログインした状態で表示できます。
 
(図125)

②開発者用ポータルを開く
「Developer Portal」と書かれたリンクを開きます。
 
(図126)

③ご自身のアプリケーション設定を開く
左ペインのメニューから「Projects & Apps」⇒「Overview」⇒「STANDALONE APPS」⇒「ご自身のアプリ」と選択します(例では「RainbowTweetSearch」という名前)。
 
(図127)

 

④App permissionsの編集
「App permissions」の設定が恐らくは「Read and Write」になっていると思いますが、ここにDMの権限を追加していきます。
 
・「App permissions」に「Edit」を押下します。
(図128)

 

⑤権限の変更
「Read and Write」⇒「Read + Write + Direct Messages」に変更し、Saveを押下します。
(図129)

 

確認のダイアログで「Yes」を押下します。
(図130)

 

正常に変更できれば「Your changes have been saved」とメッセージが出ます。
(図131)
 

目次にもどる

(1-3) 認証トークンの再生成

権限の変更をした後は、「認証トークン」を再度生成する必要があります。これを忘れると、反映されないため注意が必要です。
 
①Keys and tokens画面を開く
左ペインのメニューから「Projects & Apps」⇒「Overview」⇒「STANDALONE APPS」⇒「ご自身のアプリ」と選択した後の中央付近にある「Keys and tokens」のリンクを選択します。
(図132)

 

②Access token & secretの再生成
・「Authentication Tokens」の「Regenerate」を選択します。
 
(図133)

 

・確認のメッセージが出たら「Yes, regenerate」を押下します。
(図134)

・トークンを控える
発行が完了すると新しいトークンが表示されるので、内容を控えます。
(図135)

目次にもどる

(1-4) サンプルプログラム

上記の設定変更が出来たら、次のサンプルが実行できずはずです。

(サンプルプログラム)

import twitter.CommonUtil;
import twitter4j.DirectMessage;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.conf.ConfigurationBuilder;

public class SendDirectMessage {
  public static void main(String[] args) {

        //#### (事前準備)設定の取り込み (ConfigurationBuilderクラス)
        //# インスタンス生成
        ConfigurationBuilder cb = new ConfigurationBuilder();
        //# キー情報の設定
        cb.setDebugEnabled(true)
        .setOAuthConsumerKey(“[ご自身のConsumerKey]”)
        .setOAuthConsumerSecret(“[ご自身のConsumerSecret]”)
        .setOAuthAccessToken(“[ご自身のAccessToken]”)
        .setOAuthAccessTokenSecret(“[ご自身のAccessTokenSecret]”);

    //# 送信する相手
    String reciever = "[受信者のユーザーID]";
    //# 送信するメッセージ
    String message = "ここにメッセージを入力します";

    try {
        //#### (事前準備)各種Twitterインスタンスの生成
        //# ファクトリクラスのインスタンス生成
        TwitterFactory tf = new TwitterFactory(cb.build());
        //# Twitterクラスのインスタンス生成
      Twitter twitter = tf.getInstance();
      //#### ①フォローターゲットの対象を格納するオブジェクト
      System.out.println("#### DM送信処理開始 ####");
      DirectMessage dm = twitter.sendDirectMessage(reciever, message);
      System.out.println("#### DM送信処理終了 ####");
      System.exit(0);
    } catch (TwitterException e) {
      e.printStackTrace();
      System.out.println("#### DM送信に失敗しました: " + e.getMessage());
      System.exit(-1);
    }
  }
}

(図141)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaのenumでフィールドを複数定義したり、値を取得する方法

<目次> (1) Javaのenumでフィールドを複数定義したり、値を取得する方法  (1-1) enumでフィールドを定義・取得する  (1-2) enumでフィールドを複数定義・取得する (1) …

Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録

<目次> (1) Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録  (1-1) 発生事象・エラーメッセージ  (1-2) 原因  (1-3) 対策 (1) Javaのフォー …

Javaで実装したLinkedListのサンプルプログラムをご紹介

<目次> (1) Javaで実装したLinkedListのサンプルプログラムをご紹介  (1-1) LinkedListの概要  (1-2) LinkedListの特徴  (1-3) LinkedLi …

Javaの継承やオーバーライドとは?特徴の解説とサンプルプログラムの紹介

(0)目次&概説 (1) 継承/Inherit  (1-1) 継承とは?  (1-2) 継承の特徴  (1-3) 継承のサンプルコード   (1-3-1) Carクラス   (1-3-2) Truck …

Javaのstatic変数とは?その特徴及び付けた場合と付けない場合の違いを解説

(0)目次&概説 (1) static修飾子  (1-1) staticメンバとは?  (1-2) static変数   (1-2-1) static変数の説明と特徴   (1-2-2) static …

  • English (United States)
  • 日本語
Top