VB.netでニコニコ静画に有る画像の拡張子を特定する方法

お久しぶりです。
今回はニコニコ静画に使えるネタを紹介します。

静画のAPI(一部)
殆どPIRA Blog参考にしました(http://pita.s374.xrea.com/blog/archives/94

※ココに書いてある[画像番号]とはim0000のimを取った0000の事を言う

原型サイズ http://seiga.nicovideo.jp/image/source?id=[画像番号]
表示用のサイズ http://lohas.nicoseiga.jp/img/[画像番号]l
http://lohas.nicoseiga.jp/thumb/[画像番号]i
サムネイル http://lohas.nicoseiga.jp/img/[画像番号]s
http://lohas.nicoseiga.jp/thumb/[画像番号]q アス比そのまま
http://lohas.nicoseiga.jp/thumb/[画像番号] アス比変わる

ニコニコから取れる画像の形式はjpg,png,gifの三種類
だが拡張子が付いてない

どの画像がどの拡張子かを判別する方法は2つ
①保存するときレスポンスヘッダのContent-Typeを見て判断する (昔この方法だった)
②画像のバイナリー文字列の先頭の文字で判断する (今回はこの方法)

こちらのサイトを参考しました
PNG, GIF, JPEG のバイナリーデータなどについて | ヨモツネット
http://www.yomotsu.net/wp/?p=504

ファイル先頭の文字列
バイナリー文字列 デコード後
PNG 89 50 4E 47 臼NG
GIF(89a) 47 49 46 38 39 61 GIF89a
GIF(87a) 47 49 46 38 37 61 GIF87a
JPEG FF D8 FF .リ.

こうなっているので簡単に判別ができる
ね?簡単でしょ?

以下ソース

        Dim url As String = "http://seiga.nicovideo.jp/image/source?id=[画像番号]"

        Dim wc As New System.Net.WebClient
        wc.Headers.Add("Cookie", "user_session=ユーザーセッション")

        Dim imageByte As Byte() = wc.DownloadData(url)
        Dim str As String = Nothing

        For index = 0 To 5
            Dim hoge As String = Convert.ToString(imageByte(index), 16) '16進数に変換
            str = str & " " & hoge
        Next
        str = str.ToUpper() 'すべて大文字にする
        Console.WriteLine("→" & str)

        If str.StartsWith(" 89 50 4E 47") = True Then
            Console.WriteLine("PNG")
        End If


        If str.StartsWith(" 47 49 46 38 39 61") = True Then
            Console.WriteLine("GIF(89a)")
        End If


        If str.StartsWith(" 47 49 46 38 37 61") = True Then
            Console.WriteLine("GIF(87a)")
        End If


        If str.StartsWith(" FF D8 FF") = True Then
            Console.WriteLine("JPEG")
        End If

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です