我想不使用twitter4j而使用Twitter Rest
Api。面料很好,但是我找不到像getingUserFollowers()这样的方法。我不知道为什么会这样。无论如何,我想使用此服务给我的用户关注者ID。https://dev.twitter.com/rest/reference/get/followers/ids
我从Fabric网站(http://docs.fabric.io/android/twitter/access-rest-
api.html#tweets
)看了一个教程。有一个用于获取定制服务的类。但是我不明白我怎么称呼它的发送参数。
import com.twitter.sdk.android.core.TwitterApiClient;
import com.twitter.sdk.android.core.TwitterSession;
import retrofit.http.GET;
import retrofit.http.Query;
public class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession session) {
super(session);
}
public CustomService getCustomService() {
return getService(CustomService.class);
}
interface CustomService {
@GET("/1.1/followers/ids.json")
void show(@Query("user_id") long id);
}
}
我认为当我发送ID时,服务会带来关注者ID。
MyTwitterApiClient aa = new MyTwitterApiClient(session);
aa.getCustomService().show(userId);
但是应用已停止。我怎么了?
LogCat是
5897-15897/com.tumymedia.tumer.lylafortwitter E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.tumymedia.tumer.lylafortwitter, PID: 15897
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=140, result=-1, data=Intent { (has extras) }} to activity {com.tumymedia.tumer.lylafortwitter/com.tumymedia.tumer.lylafortwitter.MainActivity}: java.lang.IllegalArgumentException: CustomService.show: Must have either a return type or Callback as last argument.
at android.app.ActivityThread.deliverResults(ActivityThread.java:4058)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4101)
at android.app.ActivityThread.access$1400(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1497)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Caused by: java.lang.IllegalArgumentException: CustomService.show: Must have either a return type or Callback as last argument.
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:123)
at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:285)
at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:113)
at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236)
at java.lang.reflect.Proxy.invoke(Proxy.java:397)
at com.tumymedia.tumer.lylafortwitter.$Proxy16.show(Unknown Source)
at com.tumymedia.tumer.lylafortwitter.MainActivity$1.success(MainActivity.java:55)
at com.twitter.sdk.android.core.identity.TwitterAuthClient$CallbackWrapper.success(TwitterAuthClient.java:230)
at com.twitter.sdk.android.core.Callback.success(Callback.java:40)
at com.twitter.sdk.android.core.identity.AuthHandler.handleOnActivityResult(AuthHandler.java:91)
at com.twitter.sdk.android.core.identity.TwitterAuthClient.onActivityResult(TwitterAuthClient.java:161)
at com.twitter.sdk.android.core.identity.TwitterLoginButton.onActivityResult(TwitterLoginButton.java:131)
at com.tumymedia.tumer.lylafortwitter.MainActivity.onActivityResult(MainActivity.java:96)
at android.app.Activity.dispatchActivityResult(Activity.java:6543)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4054)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4101)
at android.app.ActivityThread.access$1400(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1497)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
实际上,Fabric使用改造来进行REST
Api调用,如Fabric文档中所述,要获取关注者的ID,我们需要将user_id作为参数传递并检索响应列表。
MyTwitterApiClient.java
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.TwitterApiClient;
import com.twitter.sdk.android.core.TwitterSession;
import retrofit.client.Response;
import retrofit.http.GET;
import retrofit.http.Query;
public class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession session) {
super(session);
}
/**
* Provide CustomService with defined endpoints
*/
public CustomService getCustomService() {
return getService(CustomService.class);
}
}
// example users/show service endpoint
interface CustomService {
@GET("/1.1/followers/ids.json")
void list(@Query("user_id") long id, Callback<Response> cb);
}
现在,在MainActivity中,我们将对用户进行身份验证,然后通过获取会话,将检索与该用户ID对应的所有关注者的列表。
MainActivity.java
public class MainActivity extends AppCompatActivity {
// Note: Your consumer key and secret should be obfuscated in your source code before shipping.
private static final String TWITTER_KEY = "YOUR_TWITTER_KEY";
private static final String TWITTER_SECRET = "YOUR_TWITTER_SECRET";
TwitterLoginButton loginButton;
SharedPreferences shared;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig), new Crashlytics());
setContentView(R.layout.activity_main);
shared = getSharedPreferences("demotwitter", Context.MODE_PRIVATE);
loginButton = (TwitterLoginButton) findViewById(R.id.login_button);
loginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
// Do something with result, which provides a TwitterSession for making API calls
TwitterSession session = Twitter.getSessionManager()
.getActiveSession();
TwitterAuthToken authToken = session.getAuthToken();
String token = authToken.token;
String secret = authToken.secret;
//Here we get all the details of user's twitter account
System.out.println(result.data.getUserName()
+ result.data.getUserId());
Twitter.getApiClient(session).getAccountService()
.verifyCredentials(true, false, new Callback<User>() {
@Override
public void success(Result<User> userResult) {
User user = userResult.data;
//Here we get image url which can be used to set as image wherever required.
System.out.println(user.profileImageUrl+" "+user.email+""+user.followersCount);
}
@Override
public void failure(TwitterException e) {
}
});
shared.edit().putString("tweetToken", token).commit();
shared.edit().putString("tweetSecret", secret).commit();
TwitterAuthClient authClient = new TwitterAuthClient();
authClient.requestEmail(session, new Callback<String>() {
@Override
public void success(Result<String> result) {
// Do something with the result, which provides the
// email address
System.out.println(result.toString());
Log.d("Result", result.toString());
Toast.makeText(getApplicationContext(), result.data,
Toast.LENGTH_LONG).show();
}
@Override
public void failure(TwitterException exception) {
// Do something on failure
System.out.println(exception.getMessage());
}
});
MyTwitterApiClient apiclients=new MyTwitterApiClient(session);
apiclients.getCustomService().list(result.data.getUserId(), new Callback<Response>() {
@Override
public void failure(TwitterException arg0) {
// TODO Auto-generated method stub
}
@Override
public void success(Result<Response> arg0) {
// TODO Auto-generated method stub
BufferedReader reader = null;
StringBuilder sb = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(arg0.response.getBody().in()));
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
String result = sb.toString();
System.out.println("Response is>>>>>>>>>"+result);
try {
JSONObject obj=new JSONObject(result);
JSONArray ids=obj.getJSONArray("ids");
//This is where we get ids of followers
for(int i=0;i<ids.length();i++){
System.out.println("Id of user "+(i+1)+" is "+ids.get(i));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
@Override
public void failure(TwitterException exception) {
// Do something on failure
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass the activity result to the login button.
loginButton.onActivityResult(requestCode, resultCode, data);
}
}
获取使用者列表 请求方式: GET 请求地址: https://open.qingtui.cn/v1/app/followers?access_token=ACCESS_TOKEN&page_size=PAGE_SIZE&request_page=REQUEST_PAGE 参数说明: 参数 必须 说明 access_token 是 接口调用凭证 page_size 是 请求页面数量 request
问题内容: 我想获取文件列表(从名为的文件夹中)。 get_files.php 与单独运行一样,即可以正确列出文件。 但是,如何在div中获取列表? 我可以包含,但是我需要使用jquery ajax来执行此操作,因为稍后会重用该函数。 问题答案: 试试这个 get_files.php Ajax脚本
我试图写这个来获取列表,我必须将ID列表作为参数传递: 我的实体是我用来查询的实体是: 但我在运行后遇到了以下异常: 有人能帮我用上面的方法获取列表吗?或者能告诉我我在这方面做错了什么。我不想使用本机,即(nativeQuery=true)使用这个。
问题内容: 是否可以获取拥有超过一百万关注者的帐户的完整关注者列表,例如麦当劳? 我使用Tweepy并遵循以下代码: 我也尝试这样: 但是我总是收到“超出速率限制”错误,并且只有5000个关注者ID。 问题答案: 为了避免速率限制,您可以/应该在下一个关注者页面请求之前等待。看起来很笨拙,但可以工作: 希望能有所帮助。
问题内容: 我使用以下注释: 当我整理一些示例内容时,它将生成以下XML: 我想获取以下XML: 我应该使用哪种注释? 我试过了 但是,整个内容消失了,结果是: 如果仅尝试重命名元素,也会发生相同的情况: 我究竟做错了什么? 更新: 这是根据第一个答案更新的类的完整代码,但仍无法正常工作(将其编组为XML时,结果为空列表): 我也尝试了以下相同的结果: 但是,关键字不为空,如下所示,而不是一个空列
问题内容: 我一直在尝试找到如何使用spaCy获取依赖关系树,但是我找不到如何获取树的任何内容,仅能找到如何导航树的内容。 问题答案: 事实证明,该树可通过文档中的令牌使用。 您是否要查找树的根,可以只浏览文档: 为了浏览树,令牌具有API来通过子代