※①:2019年10月9日:一部手作業で行わなければならなかった箇所を自動化しました。
※②:PC環境によってはうまく動作しなかったり何かしらの不具合が発生する可能性があるかもしれませんが、問題が起こったとしても責任は負えませんのでご了承下さい。
UWSCはWindowsの作業を効率化するためのツールでして、敷居はかなり高いもののマクロを組めるようになればいい感じで作業の効率化ができたりします。
僕がYouTubeで動画を上げていた頃、毎日のように動画を作って投稿していたのですが、関連動画流入を増やすための施策として動画説明欄に他のチャンネルの動画を紹介するといった事を行っていました。
YouTubeを見ている方なら分かるかもしれませんが、動画によっては以下のような感じで動画説明欄に関連動画が紹介されていますよね。
【関連動画はコチラ!】
動画タイトル1
ttps://www.youtube.com/watch?v=◯◯◯◯◯◯1
動画タイトル2
ttps://www.youtube.com/watch?v=◯◯◯◯◯◯2
動画タイトル3
ttps://www.youtube.com/watch?v=◯◯◯◯◯◯3
動画タイトル4
ttps://www.youtube.com/watch?v=◯◯◯◯◯◯4
僕も動画を作って投稿する度に上記のような関連動画リストを動画説明欄に載せるようにしていました。
ただジャンルの近い動画のタイトルとURLを1つ1つコピーして貼り付けるだけの作業でして、特にこだわりが無ければ1分くらいで終わってしまうような簡単な作業ですが、やってみると意外と面倒だったりします。
『この作業をもっと効率化できないものか』
『もっと簡単にコピペできないか・・・』
と悩んでいた時にUWSCというツールを知りました。
僕はそれまでプログラムなんて全く触れたことが無かったので、自分でマクロを組めるかどうかも怪しいほどでしたが、色々独学している内にYouTubeの動画タイトルとURLを一括取得するマクロを組む事ができました。
が、ここで問題が発覚しました。
この時に僕が組んだマクロは、YouTube検索結果のページにIE(インターネットエクスプローラー)で自動アクセスし、そのページに出てきた動画のタイトルとURLをHTML要素からそのまま抜き出してくるものだったのですが、これがYouTubeの規約的にアウトだったのです。
ネット上のサイトにプログラムでアクセスして情報を自動取得することをスクレイピングと言うのですが、これを利用規約で認めていないサイトは数多くあり、YouTubeもその1つでした。
しかし、スクレイピング禁止のサイトであっても、ネット上にAPI?なるものを公開しているサイトであれば、そのAPIとやらを介して情報にアクセスし、スクレイピングできるとのこと。
このAPIとやらを何となく理解し、プログラムを組み直すまで数ヶ月を要しましたが(実際には理解できなくて放置→再開→理解できず放置→以下ループ・・・)、何とかある程度形には出来たので、以下に載せておきます(このコード単体では動きません。他のブログ様からモジュールを拝借してくる必要があります。)。
call Module_Json.uws YouTubeAPI = "YouTubeAPIキーを入力" SearchWord = "検索キーワードを入力" //日本語キーワードは文字コードを一旦UTF8に変換した後にURLエンコードしないといけない。 SearchWord = ENCODE(SearchWord, CODE_UTF8) //UTF-8に変換 SearchWord = ENCODE(SearchWord, CODE_URL) //URLエンコード URL = "https://www.googleapis.com/youtube/v3/search?part=snippet,id&key=" + YouTubeAPI + "&maxResults=50&q=" + SearchWord + "&order=date&prettyprint=true&type=video" IE = CREATEOLEOBJ("InternetExplorer.Application")//IE立ち上げ IE.visible = true //IEを見えるようにする window_id = HNDtoID(IE.hwnd) // 位置調整(左上) ACW(window_id, 0, 0) CtrlWin(window_id, MAX) // ブラウザの画面を最大化 IE.navigate(URL) // json文字列を取得するURLにアクセス id = GETID("ダウンロードの表示 - Internet Explorer", "#32770", -1) CLKITEM(id, "ファイルを開く", CLK_ACC) id = GETID("search.json - メモ帳", "Notepad", -1) KBD(VK_CTRL, DOWN, 500) KBD(VK_A, CLICK, 500) // 全て選択 KBD(VK_C, CLICK, 500) // json文字列をクリップボードにコピー KBD(VK_CTRL, UP, 500) SLEEP(0.3) CTRLWIN(id , CLOSE2) //メモ帳閉じる DOSCMD("taskkill /im iexplore.exe /f") //IE落とす //クリップボード内のjson文字列を変数に格納 jsonStr = GETSTR(0) // json文字列を解析可能な形式に変換 obj = JSON.Parse(jsonStr) Dim TitleURL For i = 0 to 49 Try Title = obj.items.Item(i).snippet.title URL = "https://www.youtube.com/watch?v=" + obj.items.Item(i).id.videoId If i = 0 Then TitleURL = TitleURL + Title + "<#CR>" + URL Else TitleURL = TitleURL + "<#CR><#CR>" + Title + "<#CR>" + URL EndIf Except break //動画数が50個未満であれば最大数に達した段階でループを抜ける Endtry Next SendStr(0, TitleURL) msgbox("クリップボードにコピーしました。適当なメモ帳に貼り付けて使用して下さい。")
これだけでは動かないので、他のブログ様からModule_Json.uws、GitHubからjson2.jsの2つを拝借してくる必要があります。
前準備
Module_Json.uws
Module_Json.uwsを取ってくるには以下のブログ様にアクセスして下さい。
アクセスしましたら、すぐ下にModule_Json.uwsの中身のプログラムが公開されているので(一番下のものではない)、それを上から下まで全部コピーしてメモ帳などに貼り付け、拡張子を.uwsにして保存してください。
保存場所はYouTube動画タイトルURL取得.uwsと同じ場所にしておいて下さい。
json2.js
次にjson2.jsですが、以下のGitHubにて中身が公開されています。
このURLにアクセスしましたら、赤い四角で囲まれている「Raw」と書かれた部分をクリックして下さい。
プログラムの中身だけが書かれたページに飛ぶので、全選択してコピーしてください。
Module_Json.uwsを開き、先程コピーしたjson2.jsを一番下の部分に貼り付けて下さい。(貼り付ける場所はtextblock json2とendtextblockの間なので注意して下さい。)
これでYouTube動画のタイトルとURLを取得する準備は半分できました。
YouTubeAPIキーの取得
次に必要になってくるのが、YouTubeAPIキーの取得です。
YouTubeAPIキーの取得に関しては以下のサイト様が詳しいのでぜひ読んでみて下さい。
上のサイト通りの手順でキーを取得しましたら、準備はほぼ終わりになります。
プログラムの起動
あとはYouTubeAPIキーと自分の好きな検索キーワードを、
YouTubeAPI = "YouTubeAPIキーを入力" SearchWord = "検索キーワードを入力"
の部分にて設定し、マクロを起動することで検索キーワードに関連したYouTubeの動画タイトルとURLの一括取得ができます。
取得後はクリップボードにコピーされますので、適当にメモ帳などに貼り付けてお使い下さい。
関連動画のタイトルとURLのコピペ作業が面倒だと言う人におすすめ?です。
使い方
上記の準備が全て終わった方向けに簡潔に手順をまとめておきます。
①:UWSファイルの中身の一番上の方にある変数”SearchWord”の中身を好きなキーワードに設定。
②:プログラムを走らせると動画タイトルとURLを取得(クリップボードに保存されます)。
③:メモ帳などに貼り付けて、あとはご自由に。
取得した動画タイトルとURLの組み合わせから好きなものを選び、自分の動画の概要欄に貼り付けるなどして活用してみて下さい。
ちなみに、jsonデータは常に最新のものでないと意味がないので、新しく動画タイトルとURLを取得したい時は、その度に上記の手順を最初から踏んで下さい。
え? マクロを走らせる度に最新のjsonデータを自動で取得するようにしたらいいじゃないかって?
残念ながらUWSCでそれをやろうとすると何故かエラーを吐いてしまうので諦めましたごめんなさい。なので、jsonデータ取得に関しては手作業で行って下さい。
今回は以上になります。
コメント