android - 如何使用 twitter4j 库获取屏幕名称的推文?

标签 android twitter twitter4j tweets

我看过很多使用这个库的教程,但我对它没有一个清晰的概念。

首先,我如何验证 Twitter 应用程序??,

有什么方法可以对访问 token 进行硬编码,以便用户无需执行任何操作,他可以​​通过输入屏幕名称直接搜索特定用户的推文?

如何在提到屏幕名称后获取推文?

我尝试使用 twitter4j lib 阅读文档,但它对我有帮助....

我需要帮助我从两天前就陷入了这个问题,请帮助...

最佳答案

有多种验证方式:

首先,您需要创建一个应用程序 here . 然后您将收到您的消费者 key 和 secret :

Consumer key

然后您可以使用此代码在启动时请求授权。

public class MainActivity extends Activity {

    // TwitterProperties
    private CommonsHttpOAuthConsumer httpOauthConsumer;
    private OAuthProvider httpOauthprovider;

    public final static String consumerKey = "YOUR CONSUMER KEY";
    public final static String consumerSecret = "YOUR CONSUMER SECRET";

    private final String CALLBACKURL = "SCHEME://HOST";

    private Twitter twitter;
    AccessToken a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        StrictMode.enableDefaults();
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        doAuth();
    }

    private void doAuth() {
        try {
            httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey,
                    consumerSecret);
            httpOauthprovider = new DefaultOAuthProvider(
                    "https://twitter.com/oauth/request_token",
                    "https://twitter.com/oauth/access_token",
                    "https://twitter.com/oauth/authorize");
            String authUrl = httpOauthprovider.retrieveRequestToken(
                    httpOauthConsumer, CALLBACKURL);

            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri
                    .parse(authUrl)));
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }


    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        Uri uri = intent.getData();
        if (uri != null && uri.toString().startsWith(CALLBACKURL)) {

            String verifier = uri
                    .getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);

            // this will populate token and token_secret in consumer
            try {
                httpOauthprovider.retrieveAccessToken(httpOauthConsumer,
                        verifier);
            } catch (OAuthMessageSignerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OAuthNotAuthorizedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OAuthExpectationFailedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OAuthCommunicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            //Important part where it actually sets the authorization so you can use it
            a = new AccessToken(httpOauthConsumer.getToken(),
                    httpOauthConsumer.getTokenSecret());
            twitter = new TwitterFactory().getInstance();
            twitter.setOAuthConsumer(consumerKey, consumerSecret);
            twitter.setOAuthAccessToken(a);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

要完成这项工作,您需要对您的 list 进行一些调整。

  • 授予它使用互联网的权限:
    <uses-permission android:name="android.permission.INTERNET" />
  • 将启动模式设置为singleInstance
    <activity
    android:name="com.example.eredivisietwitter.MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance" >
  • 添加这个 Intent 过滤器
<intent-filter>
    <action android:name="android.intent.action.VIEW" >
    </action>

    <category android:name="android.intent.category.DEFAULT" >
    </category>

    <category android:name="android.intent.category.BROWSABLE" >
    </category>

    <data
        android:host="HOST"
        android:scheme="SCHEME" >
    </data>
</intent-filter>

确保在您的 Activity 中具有相同的主机和方案:

private final String CALLBACKURL = "SCHEME://HOST";

现在您已成功授权您的应用程序,您可以使用 Twitter 对象来请求时间线等。

例子:

private void getTweets(String user) {

    try {
        List<Status> statuses;
        statuses = twitter.getUserTimeline(user);

        System.out.println("Showing @" + user + "'s user timeline.");
        for (Status status : statuses) {

            System.out.println("@" + status.getUser().getScreenName()
                    + " - " + status.getText());
        }

    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to get timeline: " + te.getMessage());
    }

}

瞧!

关于android - 如何使用 twitter4j 库获取屏幕名称的推文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559814/

相关文章:

java - 从非存储库目录将更改加载到 Git

java - 如何使用 twitter4j 获取固定数量的推文

php - 是否有一种使用 PHP 发布到 Twitter 而无需管理用户登录或获取推文的简单方法?

java - Android 版 Twitter 的 oAuth 错误

Android的dispatchTouchEvent、onTouchEvent、onTouch在1-5分钟后停止工作

android - Firebase .setCurrentScreen 用于基于 View 的应用

android - 使用 Twitter4j 播放视频

java - 如何在 twitter 的 Maven 中运行代码

java - XML 转换中添加 UTC 字符串

ios - 无法从 Twitter 登录获取电子邮件