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>














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





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

SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ