4

次のコードを使用して、Graph API を使用して写真を Facebook にアップロードしようとしています。「Bad Request」が表示され続けますが、その理由がわかりません。同じパラメーターでcurlを使用して、写真をうまくアップロードできます。私はHttpClientでJavaを使用しています。

    PostMethod filePost = new PostMethod('https://graph.facebook.com/me/photos');
    filePost.setParameter('access_token', 'my-access-token')
    filePost.setParameter('message', 'test image')

    filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false);
    try {
      println("Uploading " + file.getName() + " to 'https://graph.facebook.com/me/photos'");
      Part[] parts = [new FilePart('source', file.getName(), file)]
      filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
      HttpClient client = new HttpClient();
      client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
      int status = client.executeMethod(filePost);
      if (status == HttpStatus.SC_OK) {
        println(
                "Upload complete, response=" + filePost.getResponseBodyAsString()
        );
      } else {
        println(
                "Upload failed, response=" + HttpStatus.getStatusText(status)
        );
      }
    } catch (Exception ex) {
      println("ERROR: " + ex.getClass().getName() + " " + ex.getMessage());
      ex.printStackTrace();
    } finally {
      filePost.releaseConnection();
    }

更新:これ以上。応答からさらに情報を取得したところ、次のようになりました。

{"error":{"type":"OAuthException","message":"現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。"}}

しかし、承認プロセスの後に Facebook から返されたアクセス トークンを使用しているため、それは正しくないようです。

ワーキングカールコード:

curl -F 'access_token=my-access-token' -F 'source=@/path/to/image.jpg' -F 'message=Some caption' https://graph.facebook.com/me/photos
4

3 に答える 3

4

問題を解決しました。パラメータを PostMethod に追加する代わりに、access_token とメッセージを Part[] 配列に追加する必要がありました。完全なコード:

    PostMethod filePost = new PostMethod('https://graph.facebook.com/me/photos');
    filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false);
    try {
      println("Uploading " + file.getName() + " to 'https://graph.facebook.com/me/photos'");
      Part[] parts = [new FilePart('source', file.getName(), file), new StringPart('access_token', "${facebookData.access_token}"), new StringPart('message', 'some message')]
      filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
      HttpClient client = new HttpClient();
      client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
      int status = client.executeMethod(filePost);
      if (status == HttpStatus.SC_OK) {
        println("Upload complete, response=" + filePost.getResponseBodyAsString());
      } else {
        println("Upload failed, response=" + HttpStatus.getStatusText(status));
        // Create response
        StringBuilder notificationsSendResponse = new StringBuilder();
        byte[] byteArrayNotifications = new byte[4096];
        for (int n; (n = filePost.getResponseBodyAsStream().read(byteArrayNotifications)) != -1;) {
          notificationsSendResponse.append(new String(byteArrayNotifications, 0, n));
        }
        String notificationInfo = notificationsSendResponse.toString();
      }
    } catch (Exception ex) {
      println("ERROR: " + ex.getClass().getName() + " " + ex.getMessage());
      ex.printStackTrace();
    } finally {
      filePost.releaseConnection();
    }
于 2010-12-17T22:46:45.280 に答える
3

socialauth java apiを使用して、Webアプリケーションを介して画像をアップロードできます。

http://code.google.com/p/socialauth/

于 2012-10-04T09:49:38.360 に答える