OSDN Git Service

画像プレビューのvimeo対応。表示メッセージのローカライズ対応は時間がないのでまた後日
authorsyo68k <syo68k@users.sourceforge.jp>
Tue, 5 Oct 2010 01:54:26 +0000 (01:54 +0000)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 18 Feb 2012 14:15:44 +0000 (23:15 +0900)
git-svn-id: http://svn.sourceforge.jp/svnroot/tween/trunk@935 e39ad16e-3079-482e-bb30-4b4d378143b6

Tween/Thumbnail.vb

index 1165a6b..3503c6e 100644 (file)
@@ -102,7 +102,8 @@ Public Class Thumbnail
         New ThumbnailService("Tumblr", AddressOf Tumblr_GetUrl, AddressOf Tumblr_CreateImage), _
         New ThumbnailService("ついっぷるフォト", AddressOf TwipplePhoto_GetUrl, AddressOf TwipplePhoto_CreateImage), _
         New ThumbnailService("mypix/shamoji", AddressOf mypix_GetUrl, AddressOf mypix_CreateImage), _
-        New ThumbnailService("ow.ly", AddressOf Owly_GetUrl, AddressOf Owly_CreateImage)
+        New ThumbnailService("ow.ly", AddressOf Owly_GetUrl, AddressOf Owly_CreateImage), _
+        New ThumbnailService("vimeo", AddressOf Vimeo_GetUrl, AddressOf Vimeo_CreateImage)
     }
 
     Public Sub New(ByVal Owner As TweenMain)
@@ -1779,4 +1780,130 @@ Public Class Thumbnail
 
 #End Region
 
+#Region "vimeo"
+    ''' <summary>
+    ''' URL解析部で呼び出されるサムネイル画像URL作成デリゲート
+    ''' </summary>
+    ''' <param name="args">Class GetUrlArgs
+    '''                                 args.url        URL文字列
+    '''                                 args.imglist    解析成功した際にこのリストに元URL、サムネイルURLの形で作成するKeyValuePair
+    ''' </param>
+    ''' <returns>成功した場合True,失敗の場合False</returns>
+    ''' <remarks>args.imglistには呼び出しもとで使用しているimglistをそのまま渡すこと</remarks>
+
+    Private Function Vimeo_GetUrl(ByVal args As GetUrlArgs) As Boolean
+        ' TODO URL判定処理を記述
+        Dim mc As Match = Regex.Match(args.url, "^http://vimeo\.com/[0-9]+", RegexOptions.IgnoreCase)
+        If mc.Success Then
+            ' TODO 成功時はサムネイルURLを作成しimglist.Addする
+            args.imglist.Add(New KeyValuePair(Of String, String)(args.url, mc.Value))
+            Return True
+        Else
+            Return False
+        End If
+    End Function
+
+    ''' <summary>
+    ''' BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
+    ''' </summary>
+    ''' <param name="args">Class CreateImageArgs
+    '''                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
+    '''                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
+    '''                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
+    '''                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
+    ''' </param>
+    ''' <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
+    ''' なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
+    ''' <remarks></remarks>
+    Private Function Vimeo_CreateImage(ByVal args As CreateImageArgs) As Boolean
+        ' TODO: サムネイル画像読み込み処理を記述します
+        Dim http As New HttpVarious
+        Dim mc As Match = Regex.Match(args.url.Key, "http://vimeo\.com/(?<postID>[0-9]+)", RegexOptions.IgnoreCase)
+        Dim apiurl As String = "http://vimeo.com/api/v2/video/" + mc.Groups("postID").Value + ".xml"
+        Dim src As String = ""
+        Dim imgurl As String = Nothing
+        If http.GetData(apiurl, Nothing, src, 0, args.errmsg) Then
+            Dim xdoc As New XmlDocument
+            Dim xNode As XmlNode
+            Dim sb As New StringBuilder
+            Try
+                xdoc.LoadXml(src)
+                Try
+                    Dim tmp As String = xdoc.SelectSingleNode("videos/video/title").InnerText
+                    If Not String.IsNullOrEmpty(tmp) Then
+                        sb.Append("タイトル:")
+                        sb.Append(tmp)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim tmpdate As New DateTime
+                    If DateTime.TryParse(xdoc.SelectSingleNode("videos/video/upload_date").InnerText, tmpdate) Then
+                        sb.Append("投稿日時:")
+                        sb.Append(tmpdate)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim tmp As String = xdoc.SelectSingleNode("videos/video/stats_number_of_likes").InnerText
+                    If Not String.IsNullOrEmpty(tmp) Then
+                        sb.Append("Likes:")
+                        sb.Append(tmp)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim tmp As String = xdoc.SelectSingleNode("videos/video/stats_number_of_plays").InnerText
+                    If Not String.IsNullOrEmpty(tmp) Then
+                        sb.Append("再生数:")
+                        sb.Append(tmp)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim tmp As String = xdoc.SelectSingleNode("videos/video/stats_number_of_comments").InnerText
+                    If Not String.IsNullOrEmpty(tmp) Then
+                        sb.Append("コメント数:")
+                        sb.Append(tmp)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim sec As Integer = 0
+                    If Integer.TryParse(xdoc.SelectSingleNode("videos/video/duration").InnerText, sec) Then
+                        sb.Append("再生時間:")
+                        sb.AppendFormat("{0:d}:{1:d2}", sec \ 60, sec Mod 60)
+                        sb.AppendLine()
+                    End If
+                Catch ex As Exception
+                End Try
+                Try
+                    Dim tmp As String = xdoc.SelectSingleNode("videos/video/thumbnail_medium").InnerText
+                    If Not String.IsNullOrEmpty(tmp) Then
+                        imgurl = tmp
+                    End If
+                Catch ex As Exception
+                End Try
+            Catch ex As Exception
+                imgurl = ""
+            End Try
+
+            If Not String.IsNullOrEmpty(imgurl) Then
+                Dim _img As Image = http.GetImage(imgurl, args.url.Key, 0, args.errmsg)
+                If _img Is Nothing Then Return False
+                args.pics.Add(New KeyValuePair(Of String, Image)(args.url.Key, _img))
+                args.tooltiptext.Add(New KeyValuePair(Of String, String)(args.url.Key, sb.ToString.Trim()))
+                Return True
+            End If
+        End If
+        Return False
+    End Function
+
+#End Region
+
 End Class
\ No newline at end of file