Ich versuche, eine Benutzer-Timeline von twitter mit oauth2 (für die Authentifizierung nur für Anwendungen), aber das Ergebnis ist immer Null. Ich habe keine Erfahrung mit OAUTH, und ich habe mir ein paar Tutorials und Beispiele angeschaut, aber bisher noch kein Glück. Ich brauche eine bestimmte Benutzerzeitleiste (in diesem Beispiel Twitter), ohne dass sich der Benutzer anmelden muss.Twitter-Anwendung nur Authentifizierung Java-Android mit twitter4j
Ich hatte eine Anwendung, die twitter API 1 verwendet und ich habe versucht, meinen vorhandenen Code an die neue API 1.1 mit oauth2 für Application-only-Authentifizierung anzupassen. Der Code sollte funktionieren, außer dass er von Twitter nichts zurückbekommt. Wenn ich ein Ergebnis zurückbekomme, sollte es wieder funktionieren.
Die Verbindung mit Twitter erfolgt in der Funktion twitterconnect unter dem asyncop.
hier ist mein Code:
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<Tweet> tweets = new ArrayList<Tweet>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.twitter);
new AsyncOp().execute("test");
}
//Async class...
public class AsyncOp extends AsyncTask<String, Void,List<twitter4j.Status>> {
protected List<twitter4j.Status> doInBackground(String... urls) {
//auth with twitter
List<twitter4j.Status> 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<twitter4j.Status> 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<statuses.size();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<Tweet> {
private ArrayList<Tweet> tweets;
public UserItemAdapter(Context context, int textViewResourceId,
ArrayList<Tweet> 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";
}
}
}
Ist mein Problem der oauth Methode Witz? oder vielleicht mit der getuserzeitlinie? Wenn jemand einen Beispielcode oder ein Tutorial für oauth2 mit twitter4j hat, wäre es wünschenswert,
Hallo zu arbeiten, können Sie mir den vollen Arbeits Code geben von „Twitter-Feed zu holen“ nicht wahr? Ich bin vor Probleme –
'Die Methode setApplicationOnlyAuthEnabled (boolean) für den Typ ConfigurationBuilder' – jul
@jul Download nicht definiert ist und aktuelle Twitter4J Bibliothek Schnappschuss hinzufügen von hier [http://twitter4j.org/en/index.html#snapshot](http : //twitter4j.org/de/index.html#snapshot) – Mani