HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2022/04/16

Androidで Twitter4Jを使って Twitterのユーザー タイムラインを丸っと取得する方法 Androidで Twitter4Jを使って Twitterのユーザー タイムラインを丸っと取得する方法

(Twitter4Jの Java ラッパでまるっと取得!ユーザーアカウントでのログインが必要)

Tags: [Windows], [無人インストール]




● Androidで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

 まるっと取得したかった!質問は受け付けない!

 前回は Python3の tweepyライブラリ、.NET C#の Tweetinviライブラリで作りましたが、今回は Androidで作ります。

2022/04/10
Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

2022/04/14
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

2022/04/16
Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法
Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法

  Twitter Kit for Androidでまるっと取得!ユーザーアカウントでのログイン不要

・必要な物
 取得したい Twitterのアカウントの @マークの部分(URLでも良い)
 以上!


● Twitterの Javaライブラリ Twitter4Jを使いました。

 Twitterの Android用のライブラリには Twitter4Jを使いました。

Twitter4Jとは?
 Twitter4J は Twitter API の Java ラッパです。

Twitter4J
 4.0.7 Latest 18 Aug 2018


● Androidで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

 Twitter4Jの場合、Twitterアカウントにログインする必要があります。
 (公開アカウントのタイムラインの取得でもログインが必要)

 アカウントの認証方式は PIN認証を使います。
 PIN認証の場合は callback URLに "oob"を指定します。

PIN-based authorization

Twitter4J - コードサンプル

 アプリ内の WebViewを使う事で PINの自動取得等が可能です。

 また、PIN認証ではなく、 "callback://"を指定でコールバック方式にする事で "oauth_verifier"を取得して、"oauth_token"と "oauth_token_secret"の Access Tokenを取得する方法も有ります。(但し、セクリティ的に五月蝿い事を言う人がいます)

 アプリ内の WebViewを使う事が NG

.\app\build.gradle
...

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
    implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    // https://github.com/Twitter4J/Twitter4J
    implementation 'org.twitter4j:twitter4j-core:4.0.7'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.5'
}

.\app\src\main\AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.xxx">

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

    <application
...

MainActivity.kt
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import twitter4j.Paging
import twitter4j.Twitter
import twitter4j.TwitterFactory
import twitter4j.auth.AccessToken
import twitter4j.auth.RequestToken
import twitter4j.conf.ConfigurationBuilder


class MainActivity : AppCompatActivity() {

    private lateinit var twitter: Twitter
    private lateinit var requestToken: RequestToken
    private lateinit var accessToken: AccessToken

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val twitterLoginBtn = findViewById<Button>(R.id.twitter_login_btn)
        twitterLoginBtn.setOnClickListener {
            GlobalScope.launch(Dispatchers.Default) {
                val cb = ConfigurationBuilder()
                    .setDebugEnabled(true)
                    .setOAuthConsumerKey(TwitterConstants.CONSUMER_KEY)
                    .setOAuthConsumerSecret(TwitterConstants.CONSUMER_SECRET)
                    .setIncludeEmailEnabled(false)
                val tf = TwitterFactory(cb.build())
                twitter = tf.instance

                requestToken = twitter.getOAuthRequestToken("oob")

                // https://api.twitter.com/oauth/authorize?oauth_token=xxxxxxxxxx
                val uri = Uri.parse(requestToken.authorizationURL)
                val i = Intent(Intent.ACTION_VIEW, uri)
                GlobalScope.launch(Dispatchers.Main) {
                    startActivity(i)
                }
            }
        }

        val twitterLoginBtn2 = findViewById<Button>(R.id.twitter_login_btn_2)
        twitterLoginBtn2.setOnClickListener {
            val pinText = findViewById<EditText>(R.id.pinText)
            val pin = pinText.text.toString()
            if (pin.isNullOrBlank()) return@setOnClickListener

            GlobalScope.launch(Dispatchers.Default) {
                accessToken = twitter.getOAuthAccessToken(requestToken, pin)

                twitter.oAuthAccessToken = accessToken

                // val screenName = "any_account_name"
                val screenName = "locked_account_name"
                val paging: Paging = Paging(1, 200)
                val tweets = twitter.getUserTimeline(screenName, paging)
            }
        }
   }


● MalformedURLException

 注意:ConfigurationBuilderの setOAuthRequestTokenURLに "oob"を設定すると MalformedURLExceptionの例外が発生します。

 twitter.getOAuthRequestToken("oob")で設定する必要が有ります。

MalformedURLException

    val cb = ConfigurationBuilder()
        .setDebugEnabled(true)
        .setOAuthConsumerKey(TwitterConstants.CONSUMER_KEY)
        .setOAuthConsumerSecret(TwitterConstants.CONSUMER_SECRET)
        .setOAuthRequestTokenURL("oob")
        .setIncludeEmailEnabled(false)
    val tf = TwitterFactory(cb.build())
    twitter = tf.instance

    // Caused by: java.net.MalformedURLException: no protocol: oob
    requestToken = twitter.oAuthRequestToken
OK

    val cb = ConfigurationBuilder()
        .setDebugEnabled(true)
        .setOAuthConsumerKey(TwitterConstants.CONSUMER_KEY)
        .setOAuthConsumerSecret(TwitterConstants.CONSUMER_SECRET)
        .setIncludeEmailEnabled(false)
    val tf = TwitterFactory(cb.build())
    twitter = tf.instance

    requestToken = twitter.getOAuthRequestToken("oob")



Tags: [Windows], [無人インストール]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

Androidで DBのフレームワーク SQLDelightを使う方法、公式の手順だとエラーしか出ない罠
Androidで DBのフレームワーク SQLDelightを使う方法、公式の手順だとエラーしか出ない罠

  SQLDelightを Androidで使う方法

Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法
Androidの公式 Twitterライブラリで Twitterのユーザー タイムラインを丸っと取得する方法

  Twitter Kit for Androidでまるっと取得!ユーザーアカウントでのログイン不要

.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
.NET C#の Tweetinviライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法
Pythonの Tweepyライブラリで Twitterの投稿内容を投稿画像込みで丸っと取得する方法

  まるっと取得したかった!質問は受け付けない!

ちいかわの単行本を買ってみた!もちろん特装版!
ちいかわの単行本を買ってみた!もちろん特装版!

  特装版のカルタが怖いと話題のちいかわ単行本。

すみっコぐらし サンエックスの人気キャラクター お菓子のキッシュシュクレ(タルト)、フィナンシェ
すみっコぐらし サンエックスの人気キャラクター お菓子のキッシュシュクレ(タルト)、フィナンシェ

  すみっコぐらしshop東京駅店 東京キャラクターストリート 東京駅一番街に行ってみた

【全集中の呼吸】鬼滅の刃の食玩お菓子を買ったら報告するスレ、オマケシール集め【鬼殺隊】
【全集中の呼吸】鬼滅の刃の食玩お菓子を買ったら報告するスレ、オマケシール集め【鬼殺隊】

  【全買占め】「鬼滅の刃」ブームに乗っかって鬼滅のお菓子を根こそぎ買い占め、これは戦争だ【在庫滅殺】

【我が道を】遂にガチの食玩にも手を出してしまった。。。Re:ゼロから始める異世界生活ウエハース vol.3【突き進むのみ】
【我が道を】遂にガチの食玩にも手を出してしまった。。。Re:ゼロから始める異世界生活ウエハース vol.3【突き進むのみ】

  【レムは俺の嫁】レムが主役のアニメ、リゼロ【エミリアは脇役】

テレビアニメ ご注文はうさぎですか? 通称「ごちうさ」のフィギュアを買ったのでレビュー
テレビアニメ ご注文はうさぎですか? 通称「ごちうさ」のフィギュアを買ったのでレビュー

  ごちうさのスペシャル フィギュア チノ リゼ シャロを買ったのでレビュー、UFOキャッチャー景品




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2022 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/twitter_api_get_whole_tweet_android_twitter4j/