щебетать, обновлять статус - PullRequest
0 голосов
/ 01 февраля 2011

Привет! Я интегрирую Твиттер в Android через twitter4j. Я могу успешно читать твиты, опубликованные мной.


Теперь я пытаюсь опубликовать твит от него. Но я не могу.


Я получаю странное предупреждение, как показано ниже:


    02-01 16:28:43.298: WARN/System.err(729): 401:Authentication credentials were missing or incorrect.
02-01 16:28:43.308: WARN/System.err(729): {"request":"\/1\/statuses\/update.json","error":"Read-only application cannot POST"}
02-01 16:28:43.308: WARN/System.err(729): TwitterException{exceptionCode=[15bb6564-00e54a7f], statusCode=401, retryAfter=0, rateLimitStatus=null, version=2.1.7-SNAPSHOT(build: fd76317d18a608269f0566f73bbb827420c4c77e)}
02-01 16:28:43.308: WARN/System.err(729):     at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:309)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:72)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:103)
02-01 16:28:43.318: WARN/System.err(729):     at twitter4j.Twitter.updateStatus(Twitter.java:501)
02-01 16:28:43.330: WARN/System.err(729):     at com.T4J_OAuth.activities.Main$1.onClick(Main.java:69)
02-01 16:28:43.330: WARN/System.err(729):     at android.view.View.performClick(View.java:2364)
02-01 16:28:43.330: WARN/System.err(729):     at android.view.View.onTouchEvent(View.java:4179)
02-01 16:28:43.339: WARN/System.err(729):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
02-01 16:28:43.339: WARN/System.err(729):     at android.view.View.dispatchTouchEvent(View.java:3709)
02-01 16:28:43.339: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.349: WARN/System.err(729):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-01 16:28:43.359: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
02-01 16:28:43.359: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
02-01 16:28:43.359: WARN/System.err(729):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
02-01 16:28:43.369: WARN/System.err(729):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
02-01 16:28:43.369: WARN/System.err(729):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
02-01 16:28:43.378: WARN/System.err(729):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 16:28:43.378: WARN/System.err(729):     at android.os.Looper.loop(Looper.java:123)
02-01 16:28:43.378: WARN/System.err(729):     at android.app.ActivityThread.main(ActivityThread.java:4363)
02-01 16:28:43.378: WARN/System.err(729):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 16:28:43.389: WARN/System.err(729):     at java.lang.reflect.Method.invoke(Method.java:521)
02-01 16:28:43.389: WARN/System.err(729):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-01 16:28:43.398: WARN/System.err(729):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-01 16:28:43.398: WARN/System.err(729):     at dalvik.system.NativeStart.main(Native Method)

хотя я установил свое приложение в твиттере как чтение и запись, оно говорит, что я могу использовать tpost только для чтения.



Пожалуйста, помогите мне разобраться

Ответы [ 3 ]

4 голосов
/ 01 февраля 2011

Публикация твита в твиттере отличается от получения временной шкалы.

Принимая во внимание Twitter4J, сценарии могут быть следующими:

Требуется наличие экземпляра класса Twitter, которыйавторизован.

Чтобы получить временную шкалу, выполните следующие действия:

Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken(CALLBACKURL); 
...
...

После успешной проверки OAuth вы получите переменную oauth_verifier, а затем создадите AccessToken сследующие строки:

AccessToken accessToken = twitter.getOAuthAccessToken(requestToken,oauth_verifier);
String token = accessToken.getToken(), 
      secret = accessToken.getTokenSecret();

Сохраните вышеупомянутые token и secret где-нибудь, это будет использоваться при генерации AccessToken позже.

Теперь код для обновления статуса:

AccessToken accessToken = new AccessToken(token,secret);
Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey,consumerSecret,accessToken);
Status status = twitter.updateStatus("My First Status Update");
statusId = (int)status.getId();

Это обновит сообщение My First Status Update на вашей временной шкале и получит ID этого статуса в переменной statusId.

Рабочий пример того, какиспользуйте OAuth для осуществления входа через твиттер и получения первого твита вашей временной шкалы, нажмите эту ссылку на мое сообщение в блоге.

Я уверен, что после небольшого изменения этого иИспользование приведенного выше кода в нем, вы не можетепреобразовать его в код публикации твитов тоже!

1 голос
/ 27 января 2012
try {
    AccessToken accessToken = new AccessToken(token,secret);
    Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey,consumerSecret,accessToken);
    shareText= edttweetnow.getText().toString();
    status = twitter.updateStatus(shareText);
    int statusId = (int)status.getId();

    Toast.makeText(TweetLoad.this, "Tweet Successfull", Toast.LENGTH_LONG).show();

} catch (TwitterException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Toast.makeText(TweetLoad.this, e.toString(), Toast.LENGTH_LONG).show();
}

Share text - строка, в которой хранятся данные текста редактирования. TweetLoad - имя текущего класса. Сделай это

0 голосов
/ 01 февраля 2011

Первая строка говорит это: 02-01 16: 28: 43.298: WARN / System.err (729): 401: учетные данные для проверки подлинности отсутствовали или были неверными.

Либо вы вообще не входили в систему, либо использовали неверные учетные данные. Вход в Twitter уже не тривиален с oAuth. Но когда вы уже зарегистрировали свое приложение, у вас должен быть токен потребителя + секрет для работы.

Посмотрите, например, код twitter 4j или исходный код Zwitscher для Android-приложения, использующего twitter4j, для связи с Twitter.

...