001.
<JOB>
002.
<COMMENT>
003.
************************************************************
004.
URLEncodeとファイルアップロードとcharset変換用
005.
************************************************************
006.
</COMMENT>
007.
<OBJECT id=
"Stream"
progid=
"ADODB.Stream"
/>
008.
<OBJECT id=
"Stream2"
progid=
"ADODB.Stream"
/>
009.
<OBJECT id=
"StreamWorkBin"
progid=
"ADODB.Stream"
/>
010.
<OBJECT id=
"StreamBin"
progid=
"ADODB.Stream"
/>
011.
<OBJECT id=
"StreamUTF8"
progid=
"ADODB.Stream"
/>
012.
<COMMENT>
013.
************************************************************
014.
HTTP通信用
015.
ServerXMLHTTP でうまくいかない場合は、MSXML2.XMLHTTP
016.
を使います。それでもうまく行かない場合は、さらに
017.
IE設定のドメイン間のデータソースのアクセスを有効にします
018.
************************************************************
019.
</COMMENT>
020.
<OBJECT id=
"objHTTP"
progid=
"Msxml2.ServerXMLHTTP"
/>
021.
022.
<SCRIPT language=
"JavaScript"
src=
"http://lightbox.on.coocan.jp/js/2.0.0-crypto-sha1.js"
></SCRIPT>
023.
<SCRIPT language=
"JavaScript"
src=
"http://lightbox.on.coocan.jp/js/2.0.0-hmac-min.js"
></SCRIPT>
024.
<SCRIPT language=
"JavaScript"
>
025.
// *********************************************************
026.
// JavaScript メソッドのラッパー
027.
// *********************************************************
028.
function hash_hmac(str1,str2) {
029.
030.
// ここで使用します
031.
return Crypto.HMAC(Crypto.SHA1, str1, str2,{ asString: true } );
032.
033.
}
034.
function hash_hmac_bin(str1,str2) {
035.
036.
// ここでは使用しません( 整数の配列が戻されます )
037.
return Crypto.HMAC(Crypto.SHA1, str1, str2,{ asBytes: true } );
038.
039.
}
040.
// stringToBytes の結果を渡します
041.
function bytesToBase64(data) {
042.
return Crypto.util.bytesToBase64(data);
043.
}
044.
045.
function stringToBytes(data) {
046.
return Crypto.charenc.Binary.stringToBytes(data)
047.
}
048.
049.
</SCRIPT>
050.
<SCRIPT language=VBScript>
051.
052.
053.
054.
055.
apikey =
"TwitpicのAPIキー"
056.
twitpic_url =
"http://api.twitpic.com/2/upload.json"
057.
twitter_url =
"https://api.twitter.com/1/account/verify_credentials.json"
058.
059.
060.
061.
062.
063.
oauth_consumer_key =
"Consumer key"
064.
oauth_consumer_secret =
"Consumer secret"
065.
oauth_token =
"Access Token"
066.
oauth_secret =
"Access Token Secret"
067.
068.
069.
070.
071.
oauth_nonce = Nonce()
072.
073.
074.
075.
076.
oauth_timestamp = DateDiff(
"s"
,
"1970/1/1 0:00:00"
,DateAdd(
"h"
,-9,now))
077.
078.
079.
080.
081.
oauth_signature_method =
"HMAC-SHA1"
082.
oauth_version =
"1.0"
083.
084.
085.
086.
087.
088.
089.
090.
091.
base_s =
"GET"
092.
base_s = base_s &
"&"
& rfc3986_convert(URLEncode(twitter_url))
093.
base_s = base_s &
"&"
094.
095.
096.
base_s = base_s &
"oauth_consumer_key"
&
"%3D"
& oauth_consumer_key
097.
098.
base_s = base_s &
"%26"
099.
100.
base_s = base_s &
"oauth_nonce"
&
"%3D"
& oauth_nonce &
"%26"
101.
base_s = base_s &
"oauth_signature_method"
&
"%3D"
& oauth_signature_method &
"%26"
102.
base_s = base_s &
"oauth_timestamp"
&
"%3D"
& oauth_timestamp &
"%26"
103.
base_s = base_s &
"oauth_token"
&
"%3D"
& oauth_token &
"%26"
104.
base_s = base_s &
"oauth_version"
&
"%3D"
& oauth_version
105.
106.
107.
108.
109.
110.
str = hash_hmac(base_s,oauth_consumer_secret &
"&"
& oauth_secret)
111.
oauth_signature = bytesToBase64(stringToBytes(str))
112.
113.
114.
115.
116.
117.
Call
objHTTP.Open(
"POST"
,twitpic_url,
False
)
118.
119.
strBoundary = DateDiff(
"s"
,
"1970/1/1 0:00:00"
,DateAdd(
"h"
,-9,now))
120.
Call
objHTTP.setRequestHeader(
"Content-Type"
,
"multipart/form-data; boundary="
&strBoundary)
121.
122.
123.
StreamWorkBin.Open
124.
StreamWorkBin.Type = 1
125.
126.
127.
StreamBin.Open
128.
StreamBin.Type = 1
129.
130.
131.
Stream.Open
132.
Stream.Charset =
"shift_jis"
133.
StreamUTF8.Open
134.
StreamUTF8.Charset =
"utf-8"
135.
136.
137.
Stream.WriteText
"--"
& strBoundary & vbLf
138.
Stream.WriteText
"Content-Disposition: form-data; name="
"key"
""
& vbLf & vbLf
139.
Stream.WriteText apikey & vbLf
140.
Stream.WriteText
"--"
& strBoundary & vbLf
141.
Stream.WriteText
"Content-Disposition: form-data; name="
"message"
""
& vbLf & vbLf
142.
Stream.WriteText
"VBScript(WSF) からアップロードしています"
& vbLf
143.
Stream.WriteText
"--"
& strBoundary & vbLf
144.
Stream.WriteText
"Content-Disposition: form-data; name="
"media"
"; filename="
"uploadtest.png"
""
& vbLf
145.
Stream.WriteText
"Content-Type: image/png"
& vbLf
146.
Stream.WriteText vbLf
147.
Stream.Position = 0
148.
149.
Stream.CopyTo StreamUTF8
150.
StreamUTF8.Position = 0
151.
152.
153.
StreamUTF8.CopyTo StreamWorkBin
154.
155.
156.
StreamWorkBin.Position = 0
157.
StreamWorkBin.Read(3)
158.
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size-3)
159.
160.
161.
StreamWorkBin.LoadFromFile(
"1252328628672351.png"
)
162.
163.
164.
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)
165.
166.
167.
StreamWorkBin.Close
168.
StreamWorkBin.Open
169.
StreamWorkBin.Type = 1
170.
171.
172.
Stream.Close
173.
Stream.Open
174.
Stream.Charset =
"shift_jis"
175.
176.
177.
Stream.WriteText vbLf &
"--"
& strBoundary &
"--"
& vbLf
178.
Stream.Position = 0
179.
180.
181.
Stream.CopyTo StreamWorkBin
182.
183.
184.
StreamWorkBin.Position = 0
185.
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)
186.
187.
188.
nLen = StreamBin.Size
189.
StreamBin.Position = 0
190.
strData = StreamBin.Read(nLen)
191.
192.
193.
194.
Stream.Close
195.
StreamUTF8.Close
196.
StreamBin.Close
197.
StreamWorkBin.Close
198.
199.
200.
201.
202.
Call
objHTTP.SetRequestHeader(
"Content-Length"
,nLen)
203.
204.
205.
206.
207.
OAuthCheck =
"OAuth realm="
"http://api.twitter.com/"
","
& _
208.
rfc3986_convert(URLEncode(
"oauth_consumer_key"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_consumer_key)) &
""
","
& _
209.
rfc3986_convert(URLEncode(
"oauth_signature_method"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_signature_method)) &
""
","
& _
210.
rfc3986_convert(URLEncode(
"oauth_token"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_token)) &
""
","
& _
211.
rfc3986_convert(URLEncode(
"oauth_timestamp"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_timestamp)) &
""
","
& _
212.
rfc3986_convert(URLEncode(
"oauth_nonce"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_nonce)) &
""
","
& _
213.
rfc3986_convert(URLEncode(
"oauth_version"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_version)) &
""
","
& _
214.
rfc3986_convert(URLEncode(
"oauth_signature"
)) &
"="
""
& rfc3986_convert(URLEncode(oauth_signature)) &
""
""
215.
216.
Call
objHTTP.SetRequestHeader(
"X-Verify-Credentials-Authorization"
,OAuthCheck)
217.
218.
Call
objHTTP.SetRequestHeader(
"X-Auth-Service-Provider"
,twitter_url)
219.
220.
221.
222.
223.
224.
Call
objHTTP.Send(strData)
225.
226.
Wscript.Echo(objHTTP.responseText)
227.
228.
229.
230.
231.
232.
Function
Nonce( )
233.
234.
Dim
base_str,str,I,nLen,Random
235.
base_str =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
236.
base_str = base_str &
"abcdefghijklmnopqrstuvwxyz0123456789"
237.
238.
nLen = Len(base_str)
239.
240.
str =
""
241.
For
I = 1 to 32
242.
Randomize
243.
Random = 1 + Int(Rnd * nLen)
244.
str = str & Mid(base_str,Random,1)
245.
Next
246.
247.
Nonce = str
248.
249.
End
function
250.
251.
252.
253.
254.
255.
Function
URLEncode(str)
256.
257.
Stream.Open
258.
Stream.Charset =
"shift_jis"
259.
260.
Stream.WriteText str
261.
262.
Stream.Position = 0
263.
264.
Stream2.Open
265.
Stream2.Charset =
"utf-8"
266.
267.
Stream.CopyTo Stream2
268.
Stream.Close
269.
270.
271.
Stream2.Position = 0
272.
273.
274.
StreamBin.Open
275.
StreamBin.Type = 1
276.
277.
278.
Stream2.CopyTo StreamBin
279.
Stream2.Close
280.
281.
282.
StreamBin.Position = 0
283.
284.
Buffer =
""
285.
StreamBin.Read(3)
286.
Do
while not StreamBin.EOS
287.
LineBuffer = StreamBin.Read(16)
288.
289.
For
i = 1 to LenB( LineBuffer )
290.
CWork = MidB(LineBuffer,i,1)
291.
Cwork = AscB(Cwork)
292.
Cwork = Hex(Cwork)
293.
Cwork = Ucase(Cwork)
294.
if Len(Cwork) = 1 then
295.
Buffer = Buffer &
"%0"
& Cwork
296.
else
297.
Buffer = Buffer &
"%"
& Cwork
298.
end if
299.
Next
300.
301.
Loop
302.
303.
StreamBin.Close
304.
305.
URLEncode = Buffer
306.
307.
End
Function
308.
309.
310.
311.
312.
Function
rfc3986_convert(str)
313.
314.
Dim
strResult,I,strWork
315.
316.
strResult = str
317.
318.
strResult = Replace(strResult,
"%2D"
,
"-"
)
319.
strResult = Replace(strResult,
"%2E"
,
"."
)
320.
321.
322.
For
I = &H30 to &H39
323.
strWork = Hex(I)
324.
strWork =
"%"
& Ucase(strWork)
325.
strResult = Replace(strResult,strWork, Chr(I))
326.
Next
327.
328.
329.
For
I = &H41 to &H5A
330.
strWork = Hex(I)
331.
strWork =
"%"
& Ucase(strWork)
332.
strResult = Replace(strResult,strWork, Chr(I))
333.
Next
334.
335.
strResult = Replace(strResult,
"%5F"
,
"_"
)
336.
337.
338.
For
I = &H61 to &H7A
339.
strWork = Hex(I)
340.
strWork =
"%"
& Ucase(strWork)
341.
strResult = Replace(strResult,strWork, Chr(I))
342.
Next
343.
344.
strResult = Replace(strResult,
"%7E"
,
"~"
)
345.
346.
rfc3986_convert = strResult
347.
348.
End
Function
349.
350.
</SCRIPT>
351.
</JOB>