gpt4 book ai didi

android - 如何在 android 中使用 statuses/update_with_media 将图像发布到 Twitter

转载 作者:太空狗 更新时间:2023-10-29 16:05:24 25 4
gpt4 key购买 nike

我需要将图片发布到 Twitter。我在我的应用程序中集成了 Twitter。我需要在推特上发布图片而不是 URL 链接。我不想使用 TwitPic。

我使用以下代码创建了多部分实体。它给出 404 错误。

Bitmap bm = null;
String encodedImage = "";
try {

URL aURL = new URL("http://50.57.227.117/blacksheep/uploaded/Detailed_images/961314275649aladdins.jpg");
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is, 8192);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
imageBytes = baos.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
Log.v("encodedImage >>",encodedImage);

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(
"https://api.twitter.com/1.1/statuses/update_with_media.json");
ByteArrayBody bab = new ByteArrayBody(imageBytes, "forest.jpg");

MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("media", bab);
reqEntity.addPart("status", new StringBody("test image"));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();

while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
System.out.println("Response: " + s);
// Update status
//twitter4j.Status response = twitter.updateStatus(encodedImage);
// twitter4j.Status response1 = twitter.updateStatus(status);

//Log.d("Status", "> " + response1.getText());
} catch (TwitterException e) {
// Error in updating status
Log.d("Twitter Update Error", e.getMessage());
}

最佳答案

第一次尝试:

所以看起来您正在使用 Apache 的旧 http 客户端向您用来帮助与 twitter 集成的库 twitter4j 发出外部请求。我假定您使用的是 3.03 之前的最新版本,并且不希望您升级。你看,update_with_media 很新,所以我认为你的版本没有实现它。

你所做的事情的问题是 twitter 使用 oauth 进行身份验证。因此,您需要使用获得的访问 token “签署”请求。 Twitter4j,AFAIK,为你做这件事。 在不破坏身份验证的情况下,您不能使用单独的客户端进行某些调用而不引用您的好 helper 库

端点 ../update_with_media 被定义为更新当前身份验证用户的状态。我怀疑,由于您的请求中没有访问 token ,也没有用户,因此该端点甚至没有意义,因此 twitter 将其解释为 404(未找到)而不是 401(未经授权)- 有趣。

所以第一次尝试是不要求你升级到 twitter4j。有时候升级很痛苦!相反,您可以按照 this blog 中的详细说明来破解该库。 .但这并不容易,因为图书馆各不相同。

所以,如果您真的想向 twitter4j 发出单独的请求,我们可以尝试的其他方法是实际进行签名,也许使用 scribe让它更容易......大致:

        final OAuthService myTwitterService = TwitterClient.getTwitterClient().getService();
final OAuthRequest aNiceOAuthRequest = new org.scribe.model.OAuthRequest(
YOURPOST, THATURL);

第二次尝试:

但让我们不要做这一切 - 无论如何,您拥有的是 最新 版本的 twitter4j。很抱歉先走入死胡同 - 我不应该假设,但我已经包含了以上内容,以便其他人在需要时获得帮助。

事实证明最新版本已经实现了这个端点-文档here .除了它需要 StatusUpdate对象代替。所以你想做这样的事情:

final StatusUpdate statusUpdate = new StatusUpdate("Hallee hallo my status java.lang.String here...");
// now do as you did until:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
imageBytes = baos.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
// then flip the stream
byte[] myTwitterUploadBytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(myTwitterUploadBytes);
// doo and double check your encoding etc, similar to in your question..
statusUpdate.setMedia("give me a java.lang.String name", bis);
// then continue just using twitter for j- update status as you would
//... get twitter etc...
//
twitter4j.Status response = twitter.updateStatus(statusUpdate);

我目前还没有要测试的盒子 - 应该是正确的。如果仍然给出 404,响应中的错误代码是什么?你通过身份验证了吗?

如果这不起作用,我们也可以尝试上面的一些方法作为备份。

希望对您有所帮助,

最好的,

汤姆。

关于android - 如何在 android 中使用 statuses/update_with_media 将图像发布到 Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16648475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com