0

私は現在、Scribe を使用して、メディア以外のメッセージの認証と Twitter への投稿を成功させています。これは非常に簡単で、最初のテスト メッセージは問題なく投稿されました。ただし、写真を投稿することはまったくできないようです。ここここの両方で、メディアへの投稿に関する Twitter の指示を確認しました。

Github にあるすべての Scribe/Twitter の例は、メディア以外の投稿用です。Scribe を介して Twitter に写真を投稿する方法の確かな例を誰かが提供できれば素晴らしいことです!

特に 2 つの問題があります。

1) 私の投稿は承認を通過しません。上記の例を真似てみましたが、何もうまくいかないようです。

2) 画像を byte[] から文字列に変換すると、停止する前に 4113 文字しか取得できないようです。私の理解では、これは文字列が保持できる文字数をはるかに下回っています。

写真を抽出する方法は次のとおりです。

// GET PHOTO FILE AND FILE LENGTH
// INSTANTIATE UPLOAD VARIABLE WITH FILE LENGTH

    File file      = new File(photo); // ("photo" is a string path to the photo file)
    int fileLength = (int) file.length();

    uploadFile = new byte[fileLength];

// CREATE BUFFER INPUT STREAM OF FILE

    BufferedInputStream inputStream;

    try {inputStream = new BufferedInputStream(new FileInputStream(file));}
    catch (FileNotFoundException e)
    {
        inputStream = null;
        Toast.makeText(this.getApplicationContext(), "Buffer input stream error!", Toast.LENGTH_LONG).show();
    }

// READ DATA FROM FILE INTO UPLOAD VARIABLE
// CLOSE INPUT STREAM

    try {inputStream.read(uploadFile);}
    catch (IOException e) {Toast.makeText(this.getApplicationContext(), "Read input stream to upload variable error!", Toast.LENGTH_LONG).show();}

    try {inputStream.close();}
    catch (IOException e) {Toast.makeText(this.getApplicationContext(), "Close input stream error!", Toast.LENGTH_LONG).show();}
4

1 に答える 1

6

さまざまな場所からの多くの調査とピースミリングコードの後、私は最終的に自分が間違っていたことを理解しました。以下は、Scribe OAuth を介して Twitter に写真を投稿する方法の例です。

注:これはいくつかのことを前提としています...

1) すでに写真を保存しており、ファイル パスを持っている

2)ある時点ですでにユーザーを認証しており、有効なアクセストークンを持っている

3) apache-mime4j-0.6.jar と httpmime-4.0.1.jar を libs フォルダーに追加し、ビルド パスに含める必要があります!!!

これが誰かに役立つことを本当に願っています!実装は非常に簡単ですが、正常に機能するようになるまでに数日間のトラブルシューティングが必要でした!

// BUILD OAUTH SERVICE

    OAuthService oAuth = new ServiceBuilder()
        .provider(TwitterApi.class)
        .apiKey(YOUR_TWITTER_API_KEY)        // REPLACE WITH YOUR OWN!!!
        .apiSecret(YOUR_TWITTER_API_SECRET)  // REPLACE WITH YOUR OWN!!!
        .callback(YOUR_CALLBACK)             // REPLACE WITH YOUR OWN!!!
        .build();

// BUILD OAUTH REQUEST & SIGN IT RIGHT AWAY (OTHERWISE MULTIPART FORM MAY PREVENT SIGNING)

    OAuthRequest request = new OAuthRequest(Verb.POST, "https://upload.twitter.com/1.1/statuses/update_with_media.json");
    oAuth.signRequest(USER_ACCESS_TOKEN, request);  // ENTER USER'S ACCESS TOKEN

// ADD MULTIPART FORM

    try
    {
        MultipartEntity entity = new MultipartEntity();

        entity.addPart("status", new StringBody(message));       // THIS IS THE TWITTER MESSAGE
        entity.addPart("media", new FileBody(new File(photo)));  // THIS IS THE PHOTO TO UPLOAD

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        entity.writeTo(out);

        request.addPayload(out.toByteArray());
        request.addHeader(entity.getContentType().getName(), entity.getContentType().getValue());
    }
    catch (UnsupportedEncodingException e) {e.printStackTrace();}
    catch (IOException e) {e.printStackTrace();}

// SEND REQUEST

    try {response = new JSONObject (request.send().getBody());}
    catch (JSONException e) {Log.e("YOUR_APP_TAG", "JSONException Thrown: " + e.getMessage());}
于 2012-08-25T01:10:14.763 に答える