当前位置: 首页 > 工具软件 > Twitter4j > 使用案例 >

java连接twitter登录,twitter应用程序只认证java android与twitter4j

叶德本
2023-12-01

我试图从oauth2(仅针对应用程序的身份验证)从twitter获取用户时间轴,但结果始终为空.我没有OAUTH的经验,我已经看了几个教程和例子,但迄今没有运气.我需要在没有用户需要登录的情况下检索特定的用户时间表(在本例中为Twitter).

我有一个应用程序使用twitter API 1,我试图使我的现有代码适应新的API 1.1与oauth2应用程序唯一auth.所以代码应该工作,除了它没有从Twitter收到任何东西.如果我得到一个结果,那么它应该再次工作.

与Twitter的连接在asyncop下的函数twitterconnect中进行.

这是我的代码:

public class TwitterActivity extends Activity {

private ConfigurationBuilder builder;

// twitter consumer key and secret

static String TWITTER_CONSUMER_KEY = "**************";

static String TWITTER_CONSUMER_SECRET = "*************";

// twitter acces token and accestokensecret

static String TWITTER_ACCES_TOKEN = "************";

static String TWITTER_ACCES_TOKEN_SECRET = "************";

ArrayList tweets = new ArrayList();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.twitter);

new AsyncOp().execute("test");

}

//Async class...

public class AsyncOp extends AsyncTask> {

protected List doInBackground(String... urls) {

//auth with twitter

List statuses = null;

try {

Twitter twitter=twitterConnect();

statuses = twitter.getUserTimeline("Twitter");

return statuses;

} catch (Exception ex) {

Log.d("Main.displayTimeline","" + ex.getMessage());

}

return statuses;

}

protected void onPostExecute(List statuses) {

try {

String TWITTER="EEE MMM dd HH:mm:ss ZZZZZ yyyy"; SimpleDateFormat sf=new

SimpleDateFormat(TWITTER,Locale.ENGLISH); sf.setLenient(true);

for(int i=0;i

twitter4j.Status stat = statuses.get(i);

User user=stat.getUser();

Date datePosted=stat.getCreatedAt();

String text=stat.getText();

String name=user.getName();

String profile_image_url=user.getProfileImageURL();

Tweet t =new Tweet(datePosted,text,name,profile_image_url,twitterHumanFriendlyDate(datePosted));

tweets.add(t);

// logcat info

Log.i("date",datePosted.toString());

Log.i("text",text);

Log.i("user",name);

Log.i("userprofilepic",profile_image_url);

Log.i("timeofpost",twitterHumanFriendlyDate(datePosted));

}

ListView listView = (ListView) findViewById(R.id.ListViewId);

listView.setAdapter(new UserItemAdapter(TwitterActivity.this,R.layout.listitem,tweets));

ProgressBar bar=(ProgressBar) findViewById(R.id.progressBar1);

bar.setVisibility(View.GONE);

} catch

(Exception e) { e.printStackTrace(); } }

}

public class UserItemAdapter extends ArrayAdapter {

private ArrayList tweets;

public UserItemAdapter(Context context,int textViewResourceId,ArrayList tweets) {

super(context,textViewResourceId,tweets);

this.tweets = tweets;

}

@Override

public View getView(int position,View convertView,ViewGroup parent) {

View v = convertView;

if (v == null) {

LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

v = vi.inflate(R.layout.listitem,null);

}

Tweet tweet = tweets.get(position);

if (tweet != null) {

TextView username = (TextView) v.findViewById(R.id.username);

TextView message = (TextView) v.findViewById(R.id.message);

ImageView image = (ImageView) v.findViewById(R.id.avatar);

TextView date = (TextView) v.findViewById(R.id.date);

if (username != null) {

username.setText(tweet.username);

}

if (message != null) {

message.setText(tweet.message);

}

if (image != null) {

image.setImageBitmap(getBitmap(tweet.image_url));

}

if (date != null) {

date.setText(tweet.hfdate);

}

}

return v;

}

}

public Bitmap getBitmap(String bitmapUrl) {

try {

URL url = new URL(bitmapUrl);

return BitmapFactory.decodeStream(url.openConnection()

.getInputStream());

} catch (Exception ex) {

return null;

}

}

// build twitter

public Twitter twitterConnect() throws Exception

{

// setup

builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY).setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);

OAuth2Token token = new TwitterFactory(builder.build()).getInstance().getOAuth2Token();

// exercise & verify

ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setUseSSL(true);

cb.setApplicationOnlyAuthEnabled(true);

Twitter twitter = new TwitterFactory(cb.build()).getInstance();

twitter.setOAuthConsumer(TWITTER_CONSUMER_KEY,TWITTER_CONSUMER_SECRET);

twitter.setOAuth2Token(token);

return twitter;

}

public String twitterHumanFriendlyDate(Date dateCreated) {

// parse Twitter date

SimpleDateFormat dateFormat = new SimpleDateFormat(

"EEE MMM dd HH:mm:ss ZZZZZ yyyy",Locale.ENGLISH);

dateFormat.setLenient(false);

Date created = dateCreated;

// today

Date today = new Date();

// how much time since (ms)

Long duration = today.getTime() - created.getTime();

long second = 1000;

long minute = second * 60;

long hour = minute * 60;

long day = hour * 24;

if (duration < second * 7) {

return "right now";

}

if (duration < minute) {

int n = (int) Math.floor(duration / second);

return n + " seconds ago";

}

if (duration < minute * 2) {

return "about 1 minute ago";

}

if (duration < hour) {

int n = (int) Math.floor(duration / minute);

return n + " minutes ago";

}

if (duration < hour * 2) {

return "about 1 hour ago";

}

if (duration < day) {

int n = (int) Math.floor(duration / hour);

return n + " hours ago";

}

if (duration > day && duration < day * 2) {

return "yesterday";

}

if (duration < day * 365) {

int n = (int) Math.floor(duration / day);

return n + " days ago";

} else {

return "over a year ago";

}

}

}

我的问题是否是oauth方法?或者说getusertimeline?

如果任何人有一些示例代码或教程oauth2与twitter4j,将不胜感激

 类似资料: