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)
順次、作成予定。