masalibの日記

システム開発、運用と猫の写真ブログです

node.jsでURL(image系)の存在チェック

経緯

本来ありえないけど、イメージファイルが存在しない場合に200ステータスのごめんなさいページ(HTML)をかえすサーバーがあった
これだと本当に画像が存在しないのかはwgetでは判断できなかった
対応して事前に存在チェックすることにした

続きを読む

ClassicASPで外部にあるサーバーの画像を取得して、バイナリー出力する

前提

外部にあるサーバーは公開していない(IP制限している)のでユーザーに見せることができない

詳細

MSXML2.ServerXMLHTTPというオブジェクトで通信して
取得した結果をそのまま出力する
前回とほぼ同じ
masalib.hatenablog.com

ソース

Dim getURL
Dim objXMLHTTP
Dim objADOStream
Dim strHost			'ホスト名
Dim strPort			'ポート番号
Dim strRequest

Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
strHost = SERVER_XXXX		'直うちでもドメインでもOK		
strPort = SERVER_XXXX_PORT	'省略はできないみたい
strRequest = "/xxx/image.jpg"
getURL = "http://" & strHost & ":" & strPort  & strRequest

objXMLHTTP.open "GET", getURL, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
	Set objADOStream = CreateObject("ADODB.Stream")
	objADOStream.Open
	objADOStream.Type = 1 'adTypeBinary
	objADOStream.Write objXMLHTTP.ResponseBody
	objADOStream.Position = 0    'Set the stream position to the start
	Response.BinaryWrite objADOStream.Read

	objADOStream.Close
	Set objADOStream = Nothing
End if

感想

basp21を使わないので64ビット環境でも動くと思う

CentOS6にnode.jsのgm(graphicsmagic)をインストール

gmとは画像加工する為のライブラリーです
http://aheckmann.github.io/gm/
で試せます

$ sudo vi /etc/yum.repos.d/naulinux-school.repo

下記を書き込む

[naulinux-school]
name=NauLinux School
baseurl=http://downloads.naulinux.ru/pub/NauLinux/6.2/$basearch/sites/School/RPMS/
enabled=0
gpgcheck=1
gpgkey=http://downloads.naulinux.ru/pub/NauLinux/RPM-GPG-KEY-linux-ink

書き込むが完了したらyumでインストールする

$ sudo yum --enablerepo=naulinux-school install GraphicsMagick -y

準備ができたのでnpmでgmをインストールする

$ sudo npm install gm

参考URL
qiita.com
node.jsを使ってサーバサイドで画像合成してみる (gm(GraphicsMagick for node.js)編) |

Node.js超入門

Node.js超入門

CentOS 6.xにnode.js(v8系)をインストールする

今入っているやつがあれば削除する

$ sudo yum remove nodejs

で消しました。
事前にいれておくべきパッケージをインストールする

$ sudo yum install -y gcc-c++ make


リポジトリのインストールをインストールする

$ sudo rpm -Uvh https://rpm.nodesource.com//pub_8.x/el/6/x86_64/nodejs-8.9.4-1nodesource.x86_64.rpm

2018/02/14時点のバージョンは8.9.4だけどバージョンアップする可能性があるので下記のページで確認してからインストール
https://rpm.nodesource.com//pub_8.x/el/6/x86_64/

もし9系をいれたい場合は下記を確認してインストール
https://rpm.nodesource.com//pub_9.x/el/6/x86_64/

$ sudo rpm -Uvh https://rpm.nodesource.com//pub_9.x/el/6/x86_64/nodejs-9.5.0-1nodesource.x86_64.rpm

最後にバージョンの確認

$ node -v 

v8.9.4が表示されればOKです

参考URL
https://qiita.com/zaburo/items/a69ab94f707454a5bbe7

Node.js超入門

Node.js超入門

あとiptabelsの設定で3000ポートを許可しないとアクセスできない。ローカルだったので停止した

service iptables stop
chkconfig iptables off
chkconfig --list | grep iptables

SElinuxが動いていると上手く動かなかった。諦めた

SElinuxの停止
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-enabling_and_disabling_selinux

モンスト:バレンタインガチャを回したなど・・・

FFのコラボはやっと運極になりました





ジェクトが対応キャラがもっておらず毎回苦労して倒しました
FFのキャラを1匹いれているのですが、★5キャラなので弱いです
本当に直ゲットしかないクエストはやめてほしいです

帝釈天という超絶がきたのですが
クーフーリンの接待かなと思うぐらい弱かった


2月13日にバレンタインガチャがきた
ヒカリ以外はもっていなかったので、回すことにした
覇者の塔で手に入れたオーブをもとに20連しました

爆死でしたwww

星玉ガチャでなんとかノブナガをゲットした
この制度がなかったらまじ泣ける

ノブナガXがほしかったな~・・・

ClassicASPで外部のファイルを保存する

ミスというかワケガワカラナイヨの状態なのでメモを残す

ClassicASPという超絶古い言語があります
Active Server Pages - Wikipedia

ライブラリーがそろっていないので有名です
ソケット通信するのですら、標準ではできません

フリーのライブラリーのbasp21を使って外部の画像を取得して保存していました
外部の画像の部分が変更になったので修正したらなぜか動きません・・・

bsocket.readline datas
の部分で -3 : データなしになってしまいました

Set bobj = WScript.CreateObject("basp21")
Set bsocket = WScript.CreateObject("basp21.socket")
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad")
rc1 = bsocket.Connect("www.hi-ho.ne.jp", 80, 10)
if rc1 <> 0 then
  bobj.debug "connect error " & rc1
  WScript.quit
end if
cmd = "GET /xxxxx/x.jpg HTTP/1.0"
host = "Host: getsitedomain.com" & vbCrLf  ' Hostヘッダをつけること
rc1 = bsocket.write (cmd & vbCrLf & host & vbCrLf)
if rc1 <> 0 then
  bobj.debug "write error " & rc1
  WScript.quit
end if
bsocket.readline datas
bobj.debug datas
While rc1 = 0 And Len(datas) > 0  ' ヘッダーを読み飛ばす
    rc1 = bsocket.readline(datas)
    bobj.debug datas
Wend
rc1 = bsocket.read(datax, 1)      ' イメージをバイナリ読込み
mode = 0: lenx = 0
While rc1 = 0                    
  lenx = lenx + UBound(datax) + 1
  rc1 = bobj.BinaryWrite(datax, savetopath, mode)
  mode = mode + 1
  rc1 = bsocket.read(datax, 1)
Wend
bobj.debug lenx

wgetとかcurlとかで調査してもわからずこのプログラムを破棄して

gist.github.com

を参考にして作りかえました

Dim getURL
Dim objXMLHTTP
Dim objADOStream
Dim saveTo
Dim objFSO
Dim strHost			'ホスト名
Dim strPort			'ポート番号
Dim strRequest


Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
strHost = SERVER_XXXX		'直うちでもドメインでもOK		
strPort = SERVER_XXXX_PORT	'省略はできないみたい
strRequest = "/xxx/image.jpg"
getURL = "http://" & strHost & ":" & strPort  & strRequest

objXMLHTTP.open "GET", getURL, false
objXMLHTTP.send()
saveTo = strCreateImagePath & ".jpg" 
If objXMLHTTP.Status = 200 Then
	Set objADOStream = CreateObject("ADODB.Stream")
	objADOStream.Open
	objADOStream.Type = 1 'adTypeBinary

	objADOStream.Write objXMLHTTP.ResponseBody
	objADOStream.Position = 0    'Set the stream position to the start

	Set objFSO = Createobject("Scripting.FileSystemObject")
	If objFSO.Fileexists(saveTo) Then 
		objFSO.DeleteFile saveTo
	End IF
	Set objFSO = Nothing

	objADOStream.SaveToFile saveTo
	objADOStream.Close
	Set objADOStream = Nothing
End if

問題なく保存できた・・・・
ワケガワカラナイヨ

ライブラリーが揃っていない
ClassicASPは本当にやめたいです

モンスト:FFコラボ 第2弾のガチャを回した

やっぱり我慢できずにガチャを回しました

一発ツモ!!!
うれしいwwww
ラファエルの劣化版ですが、これで覇者の塔の21,26,36階が楽になります
今週の運極はこいつでした

徳川慶喜
マナで周回しました

あとマナ艦隊でマグメルを倒しまくり~
現在、ラック15です

また蓬莱に負けました(今回は7回やって全敗)

ブロックにハマる部分が本当に苦手です
次こそ勝ちたい