YouTubeの動画を検索して表示するデスクトップアプリケーション(その1)

YouTube APIを使って科学関連の動画を検索し、検索結果の一覧表を作成して選んだ動画を再生するようなアプリケーションを作成する。例によってwxPythonでデスクトップアプリケーションとして作りこむ。

Developer's Guide: Python
に従ってインストールしたGoogle Data Libraryはなんとか動きそうだ。
デベロッパーガイド:Data APIプロトコル
も参考にして、検索に必要な方法は(たぶん)理解できた。

まずは、wxPythonで外枠だけ作成した。
_main_tree.pyとMainFrame.pyの二つのソースからなる。_main_tree.pyの方を実行すると、写真のアプリが起動する。

以下、ここまでのソース。

#                         _main_tree.py
#------------------------------------------------------------
import os, sys
import wx

import MainFrame

class Application(wx.App):
    def OnInit(self):
        frame = MainFrame.MainFrame(None, -1)
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

def main():
    import time

    app = Application(0)
    print u"info> このアプリケーションの起動時刻は %sです。" % time.ctime(time.time())
    Util.appl_boot_path = os.getcwd()
    print u"info> 起動ディレクトリは %sです。" % Util.appl_boot_path
    app.MainLoop()

if __name__ == '__main__':
    main()
#!/bin/env python
# coding: utf-8 
#                               MainFrame.py
#----------------------------------------------------------------------------
import wx
import wx.grid
import webbrowser

class MainFrame(wx.Frame):       
    def __init__(self, id, title):
        width, height = 600,400
        wx.Frame.__init__(self, id, title=u"Enjoy Science Videos!",
                          size=wx.Size(width, height))
        Pan = wx.Panel(self, -1)

        self.table = DataTable(Pan)
        self.RBox = wx.RadioBox(Pan, -1, "",
                    choices=[u"宇宙", u"物理", u"化学", u"生物", u"コンピュータ"])
        self.Btn = wx.Button(Pan, -1, u"検索する")

        vsizer = wx.BoxSizer(wx.VERTICAL)
        vsizer.Add(self.RBox, 0, wx.ALIGN_LEFT|wx.ALL, 5)
        vsizer.Add(self.Btn,  0, wx.ALIGN_LEFT|wx.ALL, 5)
        vsizer.Add(self.table,0, wx.ALIGN_LEFT|wx.ALL, 5)
        Pan.SetSizer(vsizer)
        vsizer.Fit(Pan)

class DataTable(wx.grid.Grid):
    def __init__(self, parent):
        wx.grid.Grid.__init__(self, parent, -1)

        self.InitRow = 10
        self.CreateGrid(self.InitRow, 2)
        self.SetColLabelValue(0, u"タイトル")
        self.SetColLabelValue(1, u"再生時間[秒]")
        self.SetColSize(0, 400)
        self.SetColSize(1, 80)

    def UpdateList(self, RowNum):
        if RowNum > self.InitRow:
            self.AppendRows(RowNum-self.InitRow)

        for Row in xrange(RowNum):
            self.SetCellValue(Row, 0, 1)
            self.SetCellValue(Row, 1, 1)

順次、作成予定。