Pytube とwxでダウンローダーを作る 190530 version 6
      
          :追加された部分
      
      
          :削除された部分
      
      
    (差分が大きい場合、文字単位では表示しません)
    Pytube とwxでダウンローダーを作る 190530 # prog## Pytube とwxでダウンローダーを作る
- ずっとやってみたかった。調べたら簡単そうだったので早速作ってみた
<fig>
```
import wx ,io ,sys
from pytube import YouTube
import YouTube_ui
class MyFrame( YouTube_ui.MyFrame1 ):
	def __init__( self, parent ):
		YouTube_ui.MyFrame1.__init__( self, parent )
	def btn_go( self, event ):
		url=self.m_textCtrl1.GetValue()
		yt=YouTube(url)
		for list in yt.streams.all():
			with io.StringIO() as f:   
			sys.stdout = f         
			print(list)
			text = f.getvalue()    
			self.m_listBox1.Append(text)
	    sys.stdout = sys.__stdout__   # ?いらないかな
	def btn_bye( self, event ):
		quit()
	def btn_download( self, event ):
		pass
if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame(None)
    frame.Show(True)
    app.MainLoop()
```
- `pytube` は `pip`で落とした。すぐだった、軽そう。
- UIは`wxFormBuilder`で作る。簡単で良いです
- コードは解説サイト見ながらだけどすごく簡単
**しかし、大きな落とし穴が・・・・**
`yt.streams.all()` をforで回せば落とせるタイプのリストが一行ずつ取得できるんだけど、これは`Stream`になっていて、GUIでは表示できない
というか、表示の方法がわからない┐('д')┌
**というか、表示の方法がわからない┐('д')┌**
- `print`するのは簡単なんだけど、GUIで表示するには`text`にしなければならず、その方法がわからない
いろいろやってみたけど昨日は出来なくて、とりあえずで、`print`の出力を`text`に変換して表示したのがこのコードです
`print`は指定しなければ標準出力に出力される、コンソールね。あらかじめ出力先をテキストストリームにしておいて、そこから`getvalue`すればテキストで取得できるって事です
普段デバッグを含めて多用している`print`ですが、ものすごい実力を持ってるんだなあといつも思います
- ここで時間を取り過ぎて`download`は実装してない。構想としては、ダウンロード可能なファイルを`ListBox`に列挙して、マウスで選択したらそのIDを取得して`textctrl`に表示、`download`ボタンで指定したフォルダにダウンロードさせるというもの。コード自体はすぐ書けると思うけどまた今度です。
      Pytube とwxでダウンローダーを作る
- ずっとやってみたかった。調べたら簡単そうだったので早速作ってみた
<fig>
import wx ,io ,sys
from pytube import YouTube
import YouTube_ui
class MyFrame( YouTube_ui.MyFrame1 ):
	def __init__( self, parent ):
		YouTube_ui.MyFrame1.__init__( self, parent )
	def btn_go( self, event ):
		url=self.m_textCtrl1.GetValue()
		yt=YouTube(url)
		for list in yt.streams.all():
			with io.StringIO() as f:   
			sys.stdout = f         
			print(list)
			text = f.getvalue()    
			self.m_listBox1.Append(text)
	    sys.stdout = sys.__stdout__   # ?いらないかな
	def btn_bye( self, event ):
		quit()
	def btn_download( self, event ):
		pass
if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame(None)
    frame.Show(True)
    app.MainLoop()
- pytubeは- pipで落とした。すぐだった、軽そう。
- UIはwxFormBuilderで作る。簡単で良いです
- コードは解説サイト見ながらだけどすごく簡単
 しかし、大きな落とし穴が・・・・
 yt.streams.all()をforで回せば落とせるタイプのリストが一行ずつ取得できるんだけど、これはStreamになっていて、GUIでは表示できない
 というか、表示の方法がわからない┐('д')┌
- printするのは簡単なんだけど、GUIで表示するには- textにしなければならず、その方法がわからない
 いろいろやってみたけど昨日は出来なくて、とりあえずで、- printの出力を- textに変換して表示したのがこのコードです
 - printは指定しなければ標準出力に出力される、コンソールね。あらかじめ出力先をテキストストリームにしておいて、そこから- getvalueすればテキストで取得できるって事です
 普段デバッグを含めて多用している- printですが、ものすごい実力を持ってるんだなあといつも思います
- ここで時間を取り過ぎてdownloadは実装してない。構想としては、ダウンロード可能なファイルをListBoxに列挙して、マウスで選択したらそのIDを取得してtextctrlに表示、downloadボタンで指定したフォルダにダウンロードさせるというもの。コード自体はすぐ書けると思うけどまた今度です。