VBScript : ココログマイフォトに画像アップロード

  概要



実際の http のやり取りの内容をダンプして見て、クッキーも多いし、セッションID もいろいろあるし、
なんか途中で SOAP 呼び出してるところもあるし、あまり自信は無かったのですがあっさりできました。
ひょっとして、MSXML2.XMLHTTP が優秀なのかと思いましたが、検証テストは面倒なのでやって
いません。そのうち同じ処理を、PHPのcURLでテストしてみればはっきりするとは思います。

これで、画像関連は、Twitpic と Picasa と ココログが可能になったので、便利になると思い
ます。ただ、ココログは API では無いので、いつまで使えるかは解りませんが、このような手段が
あつたほうがココログにとってもメリットあると思うのですが。

アップロード部分のPOST データは以下のようになっています。最大5つまでアップロードできますが、
実際は、あまりデータが大きいと3枚でもエラーになります。また、画像サイズの目安も、ギャラリーの
設定で変わりますが、最大幅は ランドスケープ で600px ぐらいです。それ以上は縮小されてしまいます。

  
-----------------------------7da1e436101e2
Content-Disposition: form-data; name="__mode"

upload
-----------------------------7da1e436101e2
Content-Disposition: form-data; name="set_id"

ギャラリー番号
-----------------------------7da1e436101e2
Content-Disposition: form-data; name="num_photos"

5
-----------------------------7da1e436101e2
Content-Disposition: form-data; name="file1"; filename="print_sample.jpg"
Content-Type: image/pjpeg

バイナリデータ
バイナリデータ
    .
    .
    .
  



  ソースコード



001.<JOB>
002.<COMMENT>
003.************************************************************
004. ファイルアップロードデータ作成用
005.************************************************************
006.</COMMENT>
007.<OBJECT id="Stream" progid="ADODB.Stream" />
008.<OBJECT id="StreamWorkBin" progid="ADODB.Stream" />
009.<OBJECT id="StreamBin" progid="ADODB.Stream" />
010.<COMMENT>
011.************************************************************
012. HTTP通信用
013.************************************************************
014.</COMMENT>
015.<OBJECT id="objHTTP" progid="MSXML2.XMLHTTP" />
016. 
017.<SCRIPT language=VBScript>
018. 
019.strUser = "xxxxxxxx"
020.strPass = "xxxxxxxx"
021.strGallery = "999999"
022. 
023.' *********************************************************
024.' ログイン
025.' *********************************************************
026.target_url = "https://login.nifty.com/service/login"
027.Call objHTTP.Open( "POST",target_url, False )
028.Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
029.strData = "username="&strUser&"&password="&strPass
030.Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
031.Call objHTTP.Send(strData)
032. 
033.' *********************************************************
034.' 目的ページへ移動
035.' *********************************************************
036.Call objHTTP.Open("GET","http://app.cocolog-nifty.com/t/app/gallery/manage?__mode=start_upload&set_id=" & strGallery,False)
037.Call objHTTP.Send("")
038.' アップロードページの HTML が必要な場合は以下が必要ですが
039.' 直接アップロードでは必要ありませんでした
040.'Call objHTTP.Open("GET","http://app.cocolog-nifty.com/t/app/gallery/manage?__mode=start_upload&set_id=" & strGallery & "&nwsThough=1",False)
041.'Call objHTTP.Send("")
042. 
043.' *********************************************************
044.' アップロード
045.' *********************************************************
046.target_url = "http://app.cocolog-nifty.com/t/app/gallery/manage"
047.Call objHTTP.Open( "POST",target_url, False )
048. 
049.' File Upload 用 HTTP ヘッダ
050.strBoundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now))
051.Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary="&strBoundary)
052. 
053.' バイナリ変換用ストリーム
054.StreamWorkBin.Open
055.StreamWorkBin.Type = 1
056. 
057.' 最終バイナリストリーム
058.StreamBin.Open
059.StreamBin.Type = 1
060. 
061.' テキストストリーム
062.Stream.Open
063.Stream.Charset = "shift_jis"
064. 
065.' *********************************************************
066.' 開始セクション
067.' アップロードするファイル名はここで設定します
068.' ( 画像形式にあった、Content-Type が必要です )
069.' ※ フィールドを増やせば一度に複数アップロードも
070.' ※ 可能なはずです
071.' *********************************************************
072.Stream.WriteText "--" & strBoundary & vbLf
073.Stream.WriteText "Content-Disposition: form-data; name=""__mode""" & vbLf & vbLf
074.Stream.WriteText "upload" & vbLf
075.Stream.WriteText "--" & strBoundary & vbLf
076.Stream.WriteText "Content-Disposition: form-data; name=""set_id""" & vbLf & vbLf
077.Stream.WriteText "492403" & vbLf
078.Stream.WriteText "--" & strBoundary & vbLf
079.Stream.WriteText "Content-Disposition: form-data; name=""num_photos""" & vbLf & vbLf
080.Stream.WriteText "5" & vbLf
081.Stream.WriteText "--" & strBoundary & vbLf
082.Stream.WriteText "Content-Disposition: form-data; name=""file1""; filename=""1248964999094603.png""" & vbLf
083.Stream.WriteText "Content-Type: image/png" & vbLf
084.Stream.WriteText vbLf
085.Stream.Position = 0
086. 
087.' テキストをバイナリに変換
088.Stream.CopyTo StreamWorkBin
089. 
090.' 第一セクションを書き込み
091.StreamWorkBin.Position = 0
092.StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)
093. 
094.' 画像を読み込む
095.' 実際の画像ファイルのパスで読み込みます
096.StreamWorkBin.LoadFromFile("1248964999094603.png")
097. 
098.' 画像を書き込み
099.StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)
100. 
101.' バイナリワークをいったん閉じる
102.StreamWorkBin.Close
103.StreamWorkBin.Open
104.StreamWorkBin.Type = 1
105. 
106.' テキストをいったん閉じる
107.Stream.Close
108.Stream.Open
109.Stream.Charset = "shift_jis"
110. 
111.' 終了セクション
112.Stream.WriteText vbLf & "--" & strBoundary & "--" & vbLf
113.Stream.Position = 0
114. 
115.' テキストをバイナリに変換
116.Stream.CopyTo StreamWorkBin
117. 
118.' 終了セクションを書き込み
119.StreamWorkBin.Position = 0
120.StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)
121. 
122.' 送信データを取得
123.nLen = StreamBin.Size
124.StreamBin.Position = 0
125.strData = StreamBin.Read(nLen)
126. 
127.'Call StreamBin.SaveToFile( "result.dat", 2 )
128. 
129.Stream.Close
130.StreamBin.Close
131.StreamWorkBin.Close
132. 
133.' *********************************************************
134.' 投稿データとその長さ
135.' *********************************************************
136.Call objHTTP.SetRequestHeader("Content-Length",nLen)
137. 
138.' *********************************************************
139.' 送信( アップロード )
140.' *********************************************************
141.Call objHTTP.Send(strData)
142. 
143.Wscript.Echo("処理が終了しました")
144. 
145.</SCRIPT>
146.</JOB>













   SQLの窓    create:2010/06/17  update:2018/02/18   管理者用(要ログイン)





フリーフォントWEBサービス

SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ