[英]Android: “400 bad request” error when trying to tweet with media using Fabric and Twitter REST API
[英]Android: adding image to tweet using Fabric, Twitter REST API and Retrofit
我正在開發一個應用程序,用戶可以將某些內容發布到Twitter,也可以將照片添加到推文中。 我是Fabric和Retrofit的新手,所以我對如何實現圖像上傳以及如何使用Statuses Service的更新功能使用上傳的圖像有一些疑問。 (我知道TweetComposer允許輕松發布帶有推文的圖像,但我不想要額外的Twitter UI元素,我也希望能夠以編程方式設置與推文相關聯的位置,這對於TweetComposer來說是不可能的)。
到目前為止我所理解的是,為了在使用狀態服務更新方法發布的推文中包含圖像,我們需要首先將圖像本身上傳到Twitter。 我發現通過REST API上傳圖像是通過使用以下URL完成的:
https://upload.twitter.com/1.1/media/upload.json
我還發現可以自定義Fabric中提供的Twitter API客戶端來訪問服務端點。
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/users/show.json")
void show(@Query("user_id") long id, Callback<User> cb);
}
但是,我很樂意得到更多解釋。 首先,如何在API客戶端中更改域(到upload.twitter.com)以及我應該在回調中期望什么類型?
此外,如果圖像上傳成功並且我設法獲取其ID,我如何使用它將此媒體對象附加到由狀態服務的更新功能創建的推文? 我沒有在文檔中找到任何附加實體的方法。
到目前為止我有這個:
public class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession session)
{
super(session);
}
public UploadMediaService getUploadMediaService() {
return getService(UploadMediaService.class);
}
}
interface UploadMediaService {
@Multipart
@POST("1.1/media/upload.json")
void upload(@Part("media") TypedFile file, @Part("additional_owners") String owners, Callback cb);
}
有沒有更有知識的人可以給我一些指導? 提前致謝!
最后,在最新版本的Twitter Kit中添加了支持媒體上傳和使用媒體ID的推文(使用StatusesService)。
我已經能夠通過添加以下代碼使用StatusesService發送圖片:
File photo = new File(mCurrentPhotoPath);
TypedFile typedFile = new TypedFile("application/octet-stream", photo);
MediaService ms = twitterclient.getMediaService();
ms.upload(typedFile, null, null, new Callback<Media>() {
@Override
public void success(Result<Media> mediaResult) {
StatusesService statusesService = TwitterCore.getInstance().getApiClient(session).getStatusesService();
statusesService.update("@##### " + eventtype + " lähellä paikkaa: " + place.getText().toString() + ";\n" + comment.getText().toString(), null, false, mypos.latitude, mypos.longitude, null, true, false, mediaResult.data.mediaIdString, new Callback<Tweet>() {
@Override
public void success(Result<Tweet> tweetResult) {
//...
}
@Override
public void failure(TwitterException e) {
//...
}
});
}
@Override
public void failure(TwitterException e) {
//...
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.