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

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

  ソースコード




<JOB>
<COMMENT>
************************************************************
 ファイルアップロードデータ作成用
************************************************************
</COMMENT>
<OBJECT id="Stream" progid="ADODB.Stream" />
<OBJECT id="StreamWorkBin" progid="ADODB.Stream" />
<OBJECT id="StreamBin" progid="ADODB.Stream" />
<COMMENT>
************************************************************
 HTTP通信用
************************************************************
</COMMENT>
<OBJECT id="objHTTP" progid="MSXML2.XMLHTTP" />

<SCRIPT language=VBScript>

strUser = "xxxxxxxx"
strPass = "xxxxxxxx"
strGallery = "999999"

' *********************************************************
' ログイン
' *********************************************************
target_url = "https://login.nifty.com/service/login"
Call objHTTP.Open( "POST",target_url, False )
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = "username="&strUser&"&password="&strPass
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

' *********************************************************
' 目的ページへ移動
' *********************************************************
Call objHTTP.Open("GET","http://app.cocolog-nifty.com/t/app/gallery/manage?__mode=start_upload&set_id=" & strGallery,False)
Call objHTTP.Send("")
' アップロードページの HTML が必要な場合は以下が必要ですが
' 直接アップロードでは必要ありませんでした
'Call objHTTP.Open("GET","http://app.cocolog-nifty.com/t/app/gallery/manage?__mode=start_upload&set_id=" & strGallery & "&nwsThough=1",False)
'Call objHTTP.Send("")

' *********************************************************
' アップロード
' *********************************************************
target_url = "http://app.cocolog-nifty.com/t/app/gallery/manage"
Call objHTTP.Open( "POST",target_url, False )

' File Upload 用 HTTP ヘッダ
strBoundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now))
Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary="&strBoundary)

' バイナリ変換用ストリーム
StreamWorkBin.Open
StreamWorkBin.Type = 1

' 最終バイナリストリーム
StreamBin.Open
StreamBin.Type = 1

' テキストストリーム
Stream.Open
Stream.Charset = "shift_jis"

' *********************************************************
' 開始セクション
' アップロードするファイル名はここで設定します
' ( 画像形式にあった、Content-Type が必要です )
' ※ フィールドを増やせば一度に複数アップロードも
' ※ 可能なはずです
' *********************************************************
Stream.WriteText "--" & strBoundary & vbLf
Stream.WriteText "Content-Disposition: form-data; name=""__mode""" & vbLf & vbLf
Stream.WriteText "upload" & vbLf
Stream.WriteText "--" & strBoundary & vbLf
Stream.WriteText "Content-Disposition: form-data; name=""set_id""" & vbLf & vbLf
Stream.WriteText "492403" & vbLf
Stream.WriteText "--" & strBoundary & vbLf
Stream.WriteText "Content-Disposition: form-data; name=""num_photos""" & vbLf & vbLf
Stream.WriteText "5" & vbLf
Stream.WriteText "--" & strBoundary & vbLf
Stream.WriteText "Content-Disposition: form-data; name=""file1""; filename=""1248964999094603.png""" & vbLf
Stream.WriteText "Content-Type: image/png" & vbLf
Stream.WriteText vbLf
Stream.Position = 0

' テキストをバイナリに変換
Stream.CopyTo StreamWorkBin

' 第一セクションを書き込み
StreamWorkBin.Position = 0
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)

' 画像を読み込む
' 実際の画像ファイルのパスで読み込みます
StreamWorkBin.LoadFromFile("1248964999094603.png")

' 画像を書き込み
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)

' バイナリワークをいったん閉じる
StreamWorkBin.Close
StreamWorkBin.Open
StreamWorkBin.Type = 1

' テキストをいったん閉じる
Stream.Close
Stream.Open
Stream.Charset = "shift_jis"

' 終了セクション
Stream.WriteText vbLf & "--" & strBoundary & "--" & vbLf
Stream.Position = 0

' テキストをバイナリに変換
Stream.CopyTo StreamWorkBin

' 終了セクションを書き込み
StreamWorkBin.Position = 0
StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size)

' 送信データを取得
nLen = StreamBin.Size
StreamBin.Position = 0
strData = StreamBin.Read(nLen)

'Call StreamBin.SaveToFile( "result.dat", 2 )

Stream.Close
StreamBin.Close
StreamWorkBin.Close

' *********************************************************
' 投稿データとその長さ
' *********************************************************
Call objHTTP.SetRequestHeader("Content-Length",nLen)

' *********************************************************
' 送信( アップロード )
' *********************************************************
Call objHTTP.Send(strData)

Wscript.Echo("処理が終了しました")

</SCRIPT>
</JOB>





yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[sh_web]
claudebot
24/03/29 04:54:44
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube