2013-06-06 3 views
0

Могу ли я использовать писец для получения твитов с помощью специального хэштега с использованием streeming api? Я работаю в java, и я хочу использовать писец в проекте appengine. Является ли это возможным? Я стараюсь следующий код:Извлечь твиты с конкретным хэштегом с помощью Scribe

OAuthService service = new ServiceBuilder() 
          .provider(TwitterApi.class) 
          .apiKey(MYCONSUMERKEY) 
          .apiSecret(MYCONSUMERSECRET)   
          .debug()      
          .build(); 

    OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); 
    request.addBodyParameter("track", "prova"); 
    Token requestToken = new Token(MYACCESSTOKEN,MYACCESSTOKENSECRET); 

    service.signRequest(requestToken, request); 
    Response response = request.send(); 
    System.out.println(response.getBody()); 
    } 

Отклик:

signing request: https://stream.twitter.com/1/statuses/filter.json 
    setting token to: Token[MYACCESSTOKEN,MYACCESSTOKENSECRET] 
    generating signature... 
    base string is: GET&https%3A%2F%2Fstream.twitter.com%2F1%2Fstatuses%2Ffilter.json&oauth_consumer_key%3DMYCONSUMERKEY%26oauth_nonce%3Dxxx%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3Dxxx%26oauth_token%3Dxxx%26oauth_version%3D1.0%26track%3Dprova 
    signature is: 5UU55rZqzjiaRwSNGz/jrcffPoM= 
    appended additional OAuth parameters: { oauth_signature -> xxx , oauth_version -> 1.0 , oauth_nonce -> xxx , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> MYCONSUMERKEY , oauth_token -> xxx , oauth_timestamp -> xxx } 
    using Http Header signature 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title>Error 401 Unauthorized</title> 
</head> 
<body> 
<h2>HTTP ERROR: 401</h2> 
<p>Problem accessing '/1/statuses/filter.json'. Reason: 
<pre> Unauthorized</pre> 
+0

что 'debug()' call делает scribe печатать некоторые вещи в консоли, вы можете вставить это здесь, пожалуйста? –

+0

Я отредактировал вопрос. – Mari

ответ

1

, как я вижу из вашего кода вы пытаетесь подписать GET вызов requestToken, вы должны принять первый в маркер доступа, то используйте этот accessToken для подписания любых вызовов GET/POST. Попробуйте сделать так:

OAuthService service = new ServiceBuilder() 
         .provider(TwitterApi.class) 
         .apiKey(MYCONSUMERKEY) 
         .apiSecret(MYCONSUMERSECRET)   
         .debug()      
         .build(); 

//get a request token 
Token requestToken = service.getRequestToken(); 

//go to this url 
System.out.println(service.getAuthorizationUrl(requestToken)); 

//after autorizing your twitter account you will see a blank page, in the url you will see 
//a parameter called oauth_verifier=XXXXXXXXXXX; 
//paste the xxxx after this code: 

Verifier verifier = new Verifier(in.nextLine()); 

//now request an accessToken to service: 
Token accessToken = service.getAccessToken(requestToken, verifier); 

//once you have accessToken, you should use it to do GET/POST calls: 
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); 
//GET CALL DO NOT ACCEPT PARAMETER 
service.signRequest(accessToken, request); 
Response response = request.send(); 
System.out.println(response.getBody()); 


//POST CALL 
OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL); 
request.addBodyParameter("track", "prova"); 
service.signRequest(accessToken, request); 
Response response = request.send(); 
System.out.println(response.getBody()); 
Смежные вопросы