【AdFilter】Youtubeの広告をブロックしたい
iPhoneの広告ブロックアプリのAdFilterでYoutubeの広告をブロックしたかったので、カスタムフィルターを作 …
公開日:
Pythonを使ってiPhone/iPadだけでyoutubeなどの動画をダウンロードするスクリプトを作成しました。
そもそもiPhoneでPython使えるの?って話ですが、Pythonista3というアプリを使用することでiPhone/iPad上でPythonを動かすことができます。
最初に、これから作成するスクリプトの実際の動作を見てみましょう。
SafariでYoutubeを開いていたら以下の手順で実行します。
なお、実行にiPadを使用したためiPadの画面になっていますが、iPhoneでも同じです。
以降の説明で出てくる画像はiPadでスクリーンショットを撮っています。
Pythonista3はiOSで使用できるPythonの開発環境です。作成したPythonスクリプトを実行できます。pipコマンドで好きなライブラリを追加することもできますし、iOSでの開発に役立つPythonista固有のモジュールもあります。
App Storeからダウンロードできます。1200円くらいします。ちょっと高いです。。
youtube-dlというPythonで作られたツールがあります。これを使って動画をダウンロードできます(youtube以外の動画サイトにも対応しています)。
pipコマンドを使ってインストールできますが、Pythonista3はそのままではpipコマンドは使えませんので、StaSh(bashのようなシェルです)をダウンロードします。
以下をPythonista3のインタラクティブコンソール(Pythonista3を起動して右にスワイプすると出ます)で実行します。
import requests as r; exec(r.get('https://bit.ly/get-stash').text)
実行すると~/Documents/launch_stash.py
が作成されます。
~/Documents
はPythonista3のメニューからThis iPad(iPhoneの場合はThis iPhone)をタップしたときに表示される場所です。
launch_stash.py
を実行してください。
実行するとシェルが起動するので、以下を入力してyoutube-dlをインストールします。
pip install youtube_dl
これでyoutube-dlが使えるようになりました。
そのままStaSh上でyoutube-dl {動画のリンク}
を実行すれば動画のダウンロードができますが、今回はPythonのプログラム内でimportして使用します。
youtube-dlは自前のPythonスクリプトに簡単に組み込むことができます(本家のREADMEを参考にしました)。
動画をダウンロードするには、以下のように書けばよいです(プログラム全体は後で載せるのでここではイメージだけ)。
from __future__ import unicode_literals
import youtube_dl
# オプション
ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
# ダウンロード
ydl.download(['https://www.youtube.com/watch?v=XXXXXXXX'])
URLの部分を自分のダウンロードしたい動画のリンクにすればよいのですが、それをどうやって指定するのかが問題です。
リンクをコピーしてきてコマンドライン引数に渡すとか、UIを作ってそこから渡すとかあると思いますが、できるだけ簡単にダウンロード実行までつなげたいです。
そこでShare Extensionを利用したいと思います。
記事冒頭のキャプチャでも紹介しましたが、共有ボタンからPythonista3のスクリプトを実行することができます。
このとき、URLや画像などをPythonスクリプトに送ることができます。例えば、SafariのWEBページ上で共有ボタンからスクリプトを実行すると、そのとき見てたページのURLをスクリプトに渡すことができます。
Pythonista3ではShare Extensionのためにappexモジュールが用意されています。
以下に例を示します。
import appex
if not appex.is_running_extension():
print('This script is intended to be run from the sharing extension.')
return
url = appex.get_url()
if not url:
print('No input URL found.')
return
print(url)
appex.get_url()
でURLを取得してます。あとはエラー処理が書いてあるだけです。
~/Documents/Examples/Extension
フォルダ内にもサンプルスクリプトがあるので、参考にできますよ(上の例もそれを参考にしています)。
先に説明した内容を踏まえて、プログラム全体を作ってみましょう。
フォルダ構成は次のようにしています。
~Documents/
├ my_youtube_dl/
│ └ download_youtube.py
└ Videos/
~Documents/my_youtube_dl/download_youtube.py
が動画をダウンロードするスクリプトです。
~Documents/Videos/
は動画の保存先のフォルダです。
以下、download_youtube.pyの中身です。
内容としては先に説明した内容をくっつけただけで難しくありません(youtube-dlのオプションなど特に説明していませんが、気になる方は本家を確認してください)。
from __future__ import unicode_literals
import youtube_dl
import os
import appex
DOWNLOAD_DIR = '~/Documents/Videos'
class MyLogger(object):
def debug(self, msg):
print(msg)
def warning(self, msg):
pass
def error(self, msg):
print(msg)
def my_hook(d):
if d['status'] == 'finished':
print('Done downloading.')
def download_video(url):
ydl_opts = {
'outtmpl': DOWNLOAD_DIR + '/%(title)s.%(ext)s',
'logger': MyLogger(),
'progress_hooks': [my_hook]
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
def main():
if not appex.is_running_extension():
print('This script is intended to be run from the sharing extension.')
return
url = appex.get_url()
if not url:
print('No input URL found.')
return
download_video(url)
if __name__ == '__main__':
main()
処理内容
main()
関数)。download_video(url)
関数)。スクリプトを作成できたらさっそく実行してみましょう、と言いたいところですが、もうひと準備必要です。共有ボタンから起動できるようにショートカットを作成する必要があります。
ショートカットを作成
Pythonista3上で作成したスクリプトを開きます。右上の設定ボタンから「Share…」→「Run Pythonista Script」→「Edit」をタップします。「+」マークのアイコンが表示されるのでタップするとショートカットを作成できます。
ショートカットが作成できたら、記事冒頭のスクリーンショットのように共有ボタンから起動できるようになります。
ちゃんと動くかどうか確認してみてください。
以上で解説終わりです。
Pythonista3は前から持ってんですが、最近あまり使ってなかったので、今回スクリプトを作ってみました。内容的にはわざわざiPhone/iPadでやる必要ないんですけどね(。
iPhoneの広告ブロックアプリのAdFilterでYoutubeの広告をブロックしたかったので、カスタムフィルターを作 …
iPhoneの広告ブロックアプリのAdFilterを使って、Safariで表示される全ての画像をブロックします。 …
ここ2年くらい、iPhoneのSafariのコンテンツブロッカーとしてAdFilterという無料アプリを使用しています。 …
Pythonを使ってExcelファイルの図形内にあるテキストを置換します。 また、図形の中のテキストを読み取ったり、図形 …
PythonでExcelファイルのセル内の文字列を置換します。 テンプレートとなるようなファイルがあり、その中の文字列だ …
Windows10にPythonをインストールします。 公式サイトからインストーラーをダウンロードし、それを自分のPCで …
Python & Seleniumで作成したプログラムを実行形式(.exe)にします。 特に今回は一つのexeフ …