Dear Matt,

Your question solved my problem.
Actually, the signature itself and signature part in authorization
header were different!

I have urlencoded the signature and again urlencoded the authorization
header.
As a result, signature was urlencoded twice which came different from
once urlencoded signature.
I have been thinking it makes no harm urlencoding many times, but it was
not.

By urlencoding authorization header except the signature part, I have
got 200 OK.

Thank you so much for your kind support. Say thank you to Tom as well.
As I am a newcomer to twitter application development,
please help me again when I might come across other troubles ahead.

Sincely,
Ari Endo


Matt Harris wrote (2011/06/24 9:21):
> Hi Ari,
>
> I'm not familiar with VBA enough to comment on the code, but if you
> could provide an example of the basestring created, authorization
> header and signature (remember to exclude any secrets) then we can
> take a look at what could be going wrong.
>
> Best,
> @themattharris
> <https://twitter.com/intent/follow?screen_name=themattharris>
> Developer Advocate, Twitter
>
>
>
> 2011/6/23 Ari Endo <arien...@gmail.com <mailto:arien...@gmail.com>>
>
>     Dear Tom,
>
>     Here is my vba code, just for your information.
>     It returns 401 Unauthorized,
>     Failed to validate oauth signature and token
>
>     I appreciate if you give me a hint.
>
>     -------------------------------------------------
>     Private Sub cbRequestToken_Click()
>
>     Const urlRequestToken As String =
>     "https://api.twitter.com/oauth/request_token";
>     Const oauth_consumer_secret As String = "(my consumer secret)"
>     Dim timestamp As Long
>     Dim strBase As String
>     timestamp = DateDiff("s", #1/1/1970#, DateAdd("h", -9, Now))
>     Dim param As New Scripting.Dictionary (hash array)
>     param("oauth_callback") = "oob"
>     param("oauth_consumer_key") = "(my consumer key)"
>     param("oauth_nonce") = CStr(timestamp + 1)
>     param("oauth_signature_method") = "HMAC-SHA1"
>     param("oauth_timestamp") = CStr(timestamp)
>     param("oauth_version") = "1.0"
>
>     strBase = "POST&" & urlEncode(urlRequestToken) & "&" &
>     urlEncode(sortedParamConnected(param))
>     param("oauth_signature") =
>     urlEncode(hmac_sha1(oauth_consumer_secret & "&", strBase))
>
>     Dim strHeader As String
>     strHeader = "OAuth "
>     Dim i As Integer
>     For i = 0 To param.Count - 1
>     strHeader = strHeader & param.Keys(i) & "=""" &
>     urlEncode(param.Items(i)) & """"
>     If i < param.Count - 1 Then strHeader = strHeader & ", "
>     Next
>
>     Dim xmlhttp As New MSXML2.xmlhttp
>     xmlhttp.Open "POST", urlRequestToken, False
>     xmlhttp.setRequestHeader "Authorization", strHeader
>     xmlhttp.send
>
>     If xmlhttp.statusText <> "OK" Then Exit Sub
>
>     End Sub
>
>     There are several Excel VBA application which can be authenticated.
>     The point is they make a twitter class and make an object to access.
>     I am developing without using class (object-oriented).
>
>     1. my time is correct (UTC)
>     2. my signature is correct (compared with the sample in twitter
>     documentation)
>     3. when URL is https://api.twitter.com/1/, 404 Not found came back
>
>     Thank you in advance,
>     Ari
>
>
>     Tom van der Woerdt schrieb (2011/06/11 9:21):
>     > A desktop authentication flow usually includes a callback with a
>     > custom scheme (myapp://redirect) or xAuth, while a server
>     application
>     > will usually use a normal callback (http://example.com/callback)
>     with
>     > the normal OAuth flow.
>     >
>     > However, this won't cause the "Woah there!" error you get. Just like
>     > anything else related to the programming itself: Twitter doesn't
>     > discriminate by programming language. As long as you are using
>     the API
>     > correctly, it's fine.
>     >
>     > To answer your initial question: you can use C (non-object oriented
>     > language) and C++ (object-oriented language) and many other
>     languages
>     > to interface with Twitter. It's an API, so it's all the same, as
>     long
>     > as you can make a HTTP request.
>     >
>     > Tom
>     >
>     >
>     > On 6/11/11 2:17 AM, Ari Endo wrote:
>     >> Dear Tom,
>     >>
>     >> Thank you for your quick support.
>     >> I have checked all the items you listed below.
>     >>
>     >> What I would like to know is information for desktop application
>     >> different from server application.
>     >>
>     >> I would appreciate if you tell me any.
>     >> Thank you in advance,
>     >>
>     >> Ari
>     >>
>     >> Tom van der Woerdt さんは書きました (2011/06/10 17:50):
>     >>> I just checked and I was wrong - "Woah there!" can mean a lot of
>     >>> thnigs.
>     >>>
>     >>> 1. Make sure that your time is right
>     >>> 2. Make sure that the signature you make is right
>     >>> 3. Make sure that your endpoint starts with
>     https://api.twitter.com/1/
>     >>> 4. Make sure that you use valid credentials
>     >>> 5. Make sure that you are supplying all the required parameters
>     >>> 6. Make sure that your nonce is correct
>     >>> 7. Make sure everything else is correct
>     >>>
>     >>> Tom
>     >>>
>     >>>
>     >>> On 6/10/11 10:45 AM, Ari Endo wrote:
>     >>>> Dear Tom,
>     >>>>
>     >>>> Never ever did I hit the rate limit.
>     >>>> I call only once to get the authentication token.
>     >>>>
>     >>>> At most, only several times for trials.
>     >>>> Thank you for your reply,
>     >>>>
>     >>>> Ari
>     >>>>
>     >>>> Tom van der Woerdt wrote (2011/06/10 17:38):
>     >>>>> "Woah there" - sounds like you are hitting a rate limit. If
>     you don't
>     >>>>> authenticate your calls, you may only make 150 API calls per
>     hour.
>     >>>>>
>     >>>>> Tom
>     >>>>>
>     >>>>> On 6/10/11 12:54 AM, ari_endo wrote:
>     >>>>>> Hello, I am developing Twitter AP with Excel VBA.
>     >>>>>> When accessing with an object generated from twitter class, it
>     >>>>>> works.
>     >>>>>> But only with XMLHttpRequest (without object) it gets "Woah
>     there"
>     >>>>>> message.
>     >>>>>>
>     >>>>>> Is object-oriented programming needed when developing desktop
>     >>>>>> applications?
>     >>>>>> I need reference for desktop application.
>     >>>>>> I appreciate if any site is introduced.
>     >>>>>>
>     >>>>>> Thank you in advance,
>     >>>>>> Ari Endo
>     >>>>>>
>     >
>
>     --
>     Twitter developer documentation and resources:
>     https://dev.twitter.com/doc
>     API updates via Twitter: https://twitter.com/twitterapi
>     Issues/Enhancements Tracker:
>     https://code.google.com/p/twitter-api/issues/list
>     Change your membership to this group:
>     https://groups.google.com/forum/#!forum/twitter-development-talk
>     <https://groups.google.com/forum/#%21forum/twitter-development-talk>
>
>
> -- 
> Twitter developer documentation and resources: https://dev.twitter.com/doc
> API updates via Twitter: https://twitter.com/twitterapi
> Issues/Enhancements Tracker:
> https://code.google.com/p/twitter-api/issues/list
> Change your membership to this group:
> https://groups.google.com/forum/#!forum/twitter-development-talk
> <https://groups.google.com/forum/#%21forum/twitter-development-talk>

-- 
Twitter developer documentation and resources: https://dev.twitter.com/doc
API updates via Twitter: https://twitter.com/twitterapi
Issues/Enhancements Tracker: https://code.google.com/p/twitter-api/issues/list
Change your membership to this group: 
https://groups.google.com/forum/#!forum/twitter-development-talk

Reply via email to