Okay well I have figured out the issue, so I will post my findings for
those out there who come across similar issues with this library. The
library assumes that the verifier is of type integer and if it is a
string will attempt to iterate through it causing the library to
produce an oauth_verifier parameter for each digit in the PIN number.
This was discovered via packet analysis made by Wireshark. Hope this
information is of use to someone.

On Apr 27, 11:02 am, Alec Hussey <admin.maddo...@gmail.com> wrote:
> Hey everyone,
>
> I am developing a desktop twitter client in Python and Qt4 using
> python-oauth2 for authentication. I am having issues getting an access
> token using the verifier that the user enters via a dialog. I have
> checked to make sure everything entered was correctly passed and
> correctly type casted. The twitter server returns "invalid
> oauth_verifier parameter" and the code for this function is as
> follows:
>
>         �...@staticmethod
>         def sendRequest(method, httpmethod, args, auth=False):
>                 settings = QSettings(Constants.COMPANY, Constants.PRODUCT)
>                 params = urllib.urlencode(args)
>
>                 if auth:
>                         if not settings.value("oauth_token").toPyObject():
>                                 # Get request token from server
>                                 consumer = 
> oauth2.Consumer(Constants.OAUTH_CONSUMER_KEY, \
>                                                                               
>      Constants.OAUTH_CONSUMER_SECRET)
>                                 client = oauth2.Client(consumer)
>
>                                 response, content = 
> client.request("http://api.twitter.com/oauth/
> request_token", "GET")
>                                 request_token = 
> dict(urlparse.parse_qsl(content))
>
>                                 if response['status'] != "200":
>                                         print request_token
>                                         raise Exception("Failed to get 
> request token, server returned: %s
> %s" % (response['status'], content))
>
>                                 # Open twitter authorization dialog and get 
> PIN if needed
>                                 if not 
> settings.value("oauth_verifier").toPyObject():
>                                         dialog = 
> TwitterAuthorizeDialog(request_token)
>                                         dialog.exec_()
>                                         settings.setValue("oauth_verifier", 
> dialog.getVerifier())
>
>                                 # Create new token with oauth verifier and 
> initialize the client
>                                 token = 
> oauth2.Token(request_token['oauth_token'],
> request_token['oauth_token_secret'])
>                                 
> token.set_verifier(settings.value("oauth_verifier").toPyObject())
>                                 client = oauth2.Client(consumer, token)
>
>                                 # Lastly, get the access token from the server
>                                 response, content = 
> client.request("http://api.twitter.com/oauth/
> access_token", "POST")
>                                 access_token = 
> dict(urlparse.parse_qsl(content))
>
>                                 if response['status'] != "200":
>                                         print access_token
>                                         raise Exception("Failed to get access 
> token, server returned: %s
> %s" % (response['status'], content))
>
>                                 # Reinitialize client using access token and 
> store the token
>                                 token = 
> oauth2.Token(access_token['oauth_token'],
> access_token['oauth_token_secret'])
>                                 settings.setValue("oauth_token", token)
>
>                         client = oauth2.Client(consumer,
> settings.value("oauth_token").toPyObject())
>                         response, content = 
> client.request("http://api.twitter.com%s.json";
> % method, httpmethod, params)
>
>                         return json.loads(response.read(), encoding="utf-8")
>                 else:
>                         try:
>                                 http = 
> httplib.HTTPConnection("api.twitter.com")
>                                 http.request("GET", method + ".json", params)
>                                 response = http.getresponse()
>
>                                 if response.status != 200:
>                                         raise Exception("Failed to download 
> data, server returned: %d %s"
> % (response.status, response.reason))
>                                         return None
>
>                                 return json.loads(response.read(), 
> encoding="utf-8")
>                         except:
>                                 raise Exception("Failed to connect to the 
> twitter service.")
>                                 return None
>
> Any help or suggestions would be greatly appreciated.
>
> --
> Alec Hussey
>
> --
> Subscription 
> settings:http://groups.google.com/group/twitter-development-talk/subscribe?hl=en

Reply via email to