001.
<JOB>
002.
<COMMENT>
003.
************************************************************
004.
URLEncode用
005.
************************************************************
006.
</COMMENT>
007.
<OBJECT id=
"Stream"
progid=
"ADODB.Stream"
/>
008.
<OBJECT id=
"Stream2"
progid=
"ADODB.Stream"
/>
009.
<OBJECT id=
"StreamBin"
progid=
"ADODB.Stream"
/>
010.
<COMMENT>
011.
************************************************************
012.
HTTP通信用
013.
************************************************************
014.
</COMMENT>
015.
<OBJECT id=
"objHTTP"
progid=
"Msxml2.ServerXMLHTTP"
/>
016.
<COMMENT>
017.
************************************************************
018.
HMAC-SHA1 と Base64用
019.
************************************************************
020.
</COMMENT>
021.
<SCRIPT language=
"JavaScript"
src=
"hmac-sha1.js"
></SCRIPT>
022.
<SCRIPT language=
"JavaScript"
src=
"enc-base64-min.js"
></SCRIPT>
023.
<SCRIPT language=
"JavaScript"
>
024.
// *********************************************************
025.
// JavaScript メソッドのラッパー
026.
// *********************************************************
027.
function hash_hmac(str1,str2) {
028.
029.
// ここで使用します
030.
var hash = CryptoJS.HmacSHA1(str1, str2);
031.
return hash.toString(CryptoJS.enc.Base64);
032.
033.
}
034.
</script>
035.
036.
<SCRIPT language=VBScript>
037.
038.
039.
040.
postdata =
"CryptoJS.HmacSHA1(JavaScript)をVBScriptから使って投稿"
041.
042.
043.
044.
045.
twitter_url =
"https://api.twitter.com/1.1/statuses/update.json"
046.
047.
048.
049.
050.
051.
oauth_consumer_key =
"Consumer key"
052.
oauth_consumer_secret =
"Consumer secret"
053.
oauth_token =
"Access Token"
054.
oauth_secret =
"Access Token Secret"
055.
056.
057.
058.
059.
oauth_nonce = Nonce()
060.
061.
062.
063.
064.
oauth_timestamp = DateDiff(
"s"
,
"1970/1/1 0:00:00"
,DateAdd(
"h"
,-9,now))
065.
066.
067.
068.
069.
oauth_signature_method =
"HMAC-SHA1"
070.
oauth_version =
"1.0"
071.
072.
073.
074.
075.
076.
077.
base_s =
"POST"
078.
base_s = base_s &
"&"
& rfc3986_convert(URLEncode(twitter_url))
079.
base_s = base_s &
"&"
080.
081.
082.
base_s = base_s &
"oauth_consumer_key"
&
"%3D"
& oauth_consumer_key
083.
084.
base_s = base_s &
"%26"
085.
086.
base_s = base_s &
"oauth_nonce"
&
"%3D"
& oauth_nonce &
"%26"
087.
base_s = base_s &
"oauth_signature_method"
&
"%3D"
& oauth_signature_method &
"%26"
088.
base_s = base_s &
"oauth_timestamp"
&
"%3D"
& oauth_timestamp &
"%26"
089.
base_s = base_s &
"oauth_token"
&
"%3D"
& oauth_token &
"%26"
090.
base_s = base_s &
"oauth_version"
&
"%3D"
& oauth_version &
"%26"
091.
092.
base_s = base_s &
"status"
&
"%3D"
& _
093.
rfc3986_convert(URLEncode(rfc3986_convert(URLEncode(postdata))))
094.
095.
096.
097.
098.
099.
oauth_signature = hash_hmac(base_s,oauth_consumer_secret &
"&"
& oauth_secret)
100.
101.
102.
103.
104.
Call
objHTTP.Open(
"POST"
,twitter_url,
False
)
105.
106.
Call
objHTTP.setRequestHeader(
"Content-Type"
,
"application/x-www-form-urlencoded"
)
107.
108.
109.
110.
111.
112.
113.
114.
115.
headerAuth =
"OAuth realm="
"/statuses/update.json"
","
& _
116.
"oauth_consumer_key="
""
&oauth_consumer_key&
""
","
& _
117.
"oauth_token="
""
&oauth_token&
""
","
& _
118.
"oauth_nonce="
""
&oauth_nonce&
""
","
& _
119.
"oauth_timestamp="
""
&oauth_timestamp&
""
","
& _
120.
"oauth_signature_method="
""
&oauth_signature_method&
""
","
& _
121.
"oauth_version="
""
&oauth_version&
""
","
& _
122.
"oauth_signature="
""
&rfc3986_convert(URLEncode(oauth_signature))&
""
""
123.
124.
Call
objHTTP.setRequestHeader(
"Authorization"
, headerAuth)
125.
126.
127.
128.
129.
strData =
"status="
& rfc3986_convert(URLEncode(postdata))
130.
Call
objHTTP.SetRequestHeader(
"Content-Length"
,Len(strData))
131.
132.
133.
134.
135.
Call
objHTTP.Send(strData)
136.
137.
Wscript.Echo(objHTTP.responseText)
138.
139.
140.
141.
142.
143.
Function
Nonce( )
144.
145.
Dim
base_str,str,I,nLen,Random
146.
base_str =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
147.
base_str = base_str &
"abcdefghijklmnopqrstuvwxyz0123456789"
148.
149.
nLen = Len(base_str)
150.
151.
str =
""
152.
For
I = 1 to 32
153.
Randomize
154.
Random = 1 + Int(Rnd * nLen)
155.
str = str & Mid(base_str,Random,1)
156.
Next
157.
158.
Nonce = str
159.
160.
End
function
161.
162.
163.
164.
165.
166.
Function
URLEncode(str)
167.
168.
Stream.Open
169.
Stream.Charset =
"shift_jis"
170.
171.
Stream.WriteText str
172.
173.
Stream.Position = 0
174.
175.
Stream2.Open
176.
Stream2.Charset =
"utf-8"
177.
178.
Stream.CopyTo Stream2
179.
Stream.Close
180.
181.
182.
Stream2.Position = 0
183.
184.
185.
StreamBin.Open
186.
StreamBin.Type = 1
187.
188.
189.
Stream2.CopyTo StreamBin
190.
Stream2.Close
191.
192.
193.
StreamBin.Position = 0
194.
195.
Buffer =
""
196.
StreamBin.Read(3)
197.
Do
while not StreamBin.EOS
198.
LineBuffer = StreamBin.Read(16)
199.
200.
For
i = 1 to LenB( LineBuffer )
201.
CWork = MidB(LineBuffer,i,1)
202.
Cwork = AscB(Cwork)
203.
Cwork = Hex(Cwork)
204.
Cwork = Ucase(Cwork)
205.
if Len(Cwork) = 1 then
206.
Buffer = Buffer &
"%0"
& Cwork
207.
else
208.
Buffer = Buffer &
"%"
& Cwork
209.
end if
210.
Next
211.
212.
Loop
213.
214.
StreamBin.Close
215.
216.
URLEncode = Buffer
217.
218.
End
Function
219.
220.
221.
222.
223.
Function
rfc3986_convert(str)
224.
225.
Dim
strResult,I,strWork
226.
227.
strResult = str
228.
229.
strResult = Replace(strResult,
"%2D"
,
"-"
)
230.
strResult = Replace(strResult,
"%2E"
,
"."
)
231.
232.
233.
For
I = &H30 to &H39
234.
strWork = Hex(I)
235.
strWork =
"%"
& Ucase(strWork)
236.
strResult = Replace(strResult,strWork, Chr(I))
237.
Next
238.
239.
240.
For
I = &H41 to &H5A
241.
strWork = Hex(I)
242.
strWork =
"%"
& Ucase(strWork)
243.
strResult = Replace(strResult,strWork, Chr(I))
244.
Next
245.
246.
strResult = Replace(strResult,
"%5F"
,
"_"
)
247.
248.
249.
For
I = &H61 to &H7A
250.
strWork = Hex(I)
251.
strWork =
"%"
& Ucase(strWork)
252.
strResult = Replace(strResult,strWork, Chr(I))
253.
Next
254.
255.
strResult = Replace(strResult,
"%7E"
,
"~"
)
256.
257.
rfc3986_convert = strResult
258.
259.
End
Function
260.
</SCRIPT>
261.
</JOB>