FIRE実現のために、youtubeへの動画投稿にて副業を実践しているものの、手間がかかって思うように捗らないという方、多いのではないかと思います。
そこで、エクセルマクロ(VBA)でyoutubeへの投稿・更新作業を自動化・効率化するツールを作成しましたので、シェアします。
新規登録した動画のIDを取得する機能や、タイトル・説明文・タグを更新する機能など、色々な機能を実装しました。
参考になれば幸いです。
エクセルブックの紹介
エクセルにて、以下のような管理台帳シートを作って、当該シートを用いて、動画投稿や更新を管理します。
実際のマクロ入りブックは以下です。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスのアカウントよりご依頼いただければ幸いです。
youtubeへの投稿効率化ツール(VBAマクロ)の紹介
マクロの初期設定
まず、初期設定が必要です。
まず、以下記事を参考に、Seleniumの設定をします。
基本機能
共通モジュール
'youtube
Public Const youtube_explanation As String = "/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[10]/ytcp-video-details-section/ytcp-video-metadata-editor/div/ytcp-video-metadata-editor-basics/div[2]/ytcp-video-description/div/ytcp-social-suggestions-textbox/ytcp-form-input-container/div[1]/div[2]/div/ytcp-social-suggestion-input/div"
新規投稿した動画IDを取得する機能
まず、手動にて、動画を非公開状態で投稿します。この際の投稿内容は仮状態でよいです。
その後、本項のマクロを動かすと、上記した新規投稿IDを「動画」と「ライブ配信」からすべて取得し、エクセルのシートにレコード行を追加します。
Sub youtube新規ID取得(PROFILE_PATH As String)
If Workbooks("動画管理.xlsm").Sheets("リスト").FilterMode = True Then
Workbooks("動画管理.xlsm").Sheets("リスト").ShowAllData
Else
Workbooks("動画管理.xlsm").Sheets("リスト").Rows(2).AutoFilter
End If
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Get "https://studio.youtube.com/channel/UCobhns-lavAf4RvRj-ujhCA/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D"
On Error Resume Next
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[4]/ytcp-content-section/ytcp-video-section/ytcp-video-section-content/div/ytcp-video-row[1]/div/div[2]/ytcp-video-list-cell-video/div[1]/a/div/ytcp-thumbnail/div/ytcp-img-with-fallback/div/img").Click
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[4]/ytcp-content-section/ytcp-video-section/ytcp-video-section-content/div/ytcp-video-row[1]/div/div[2]/ytcp-video-list-cell-video/div[1]/a/div/div").Click
On Error GoTo 0
n = 1
Do Until WorksheetFunction.CountIf(Workbooks("動画管理.xlsm").Sheets("リスト").Columns(31), Mid(driver.Url, 34, 11)) = 1
If WorksheetFunction.CountIf(Workbooks("動画管理.xlsm").Sheets("リスト").Columns(31), Mid(driver.Url, 34, 11)) < 1 Then
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row + 1, 31) = Mid(driver.Url, 34, 11)
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row, 5) = driver.FindElementByCss("#textbox").Text
End If
n = n + 1
driver.Get "https://studio.youtube.com/channel/UCobhns-lavAf4RvRj-ujhCA/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D"
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[4]/ytcp-content-section/ytcp-video-section/ytcp-video-section-content/div/ytcp-video-row[" & n & "]/div/div[2]/ytcp-video-list-cell-video/div[1]/a/div/ytcp-thumbnail/div/ytcp-img-with-fallback/div/img").Click
Loop
driver.Get "https://studio.youtube.com/channel/UCobhns-lavAf4RvRj-ujhCA/videos/live?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D"
driver.FindElementByXPath("//*[@id='video-list-live-tab']/div/ytcp-ve/span").Click
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[4]/ytcp-content-section/ytcp-video-section/ytcp-video-section-content/div/ytcp-video-row[1]/div/div[2]/ytcp-video-list-cell-video/div[1]/a/div/ytcp-thumbnail/div/ytcp-img-with-fallback/div/img").Click
n = 1
Do Until WorksheetFunction.CountIf(Workbooks("動画管理.xlsm").Sheets("リスト").Columns(31), Mid(driver.Url, 34, 11)) = 1
If WorksheetFunction.CountIf(Workbooks("動画管理.xlsm").Sheets("リスト").Columns(31), Mid(driver.Url, 34, 11)) < 1 Then
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row + 1, 31) = Mid(driver.Url, 34, 11)
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row, 5) = driver.FindElementByCss("#textbox").Text
End If
n = n + 1
driver.Get "https://studio.youtube.com/channel/UCobhns-lavAf4RvRj-ujhCA/videos/live?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D"
driver.FindElementByXPath("//*[@id='video-list-live-tab']/div/ytcp-ve/span").Click
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[4]/ytcp-content-section/ytcp-video-section/ytcp-video-section-content/div/ytcp-video-row[" & n & "]/div/div[2]/ytcp-video-list-cell-video/div[1]/a/div/ytcp-thumbnail/div/ytcp-img-with-fallback/div/img").Click
Loop
Set driver = Nothing
End Sub
動画を編集・公開し、Twitterで宣伝し、宣伝botを登録する機能
エクセルの管理台帳上で、動画のタイトル・説明文・タグ・英文タイトル・英文説明文・ジャンルなどを編集します。
動画の説明文はエクセルのシート上、パーツごとに列で分割したものを、最後に結合しています。パーツとは、共有パーツ、アフィリエイトリンク用パーツ、次の動画パーツ、再生リストパーツなどです。
マクロを動かすことで、編集した内容をyoutubeへ反映し、ブログで宣伝している動画であれば、ブログの編集画面を開き、Twitterで宣伝し、宣伝botを登録します。
check列に1を入れた行を対象に動きます。
youtubeの動画詳細を更新します。
英語字幕を更新します。
エクセルのブログURLに値が入っていたら、ブログを開きます。公開した動画のURLをクリップボードにセットします。手動にて、対象のブログに公開した動画URLを貼り付けします。
Twitterで宣伝します。ハッシュタグはyoutubeのタグやハッシュタグ用に設定した値を流用します。
BOTフラグがONになっていたら、BOTに新規登録します。
一行上に動画データがあれば、当該動画データのyoutube詳細を更新しに行きます。(次の動画URLのテキスト情報が今回の新規投稿により取得できるようになったため、当該テキスト情報を更新します)
Sub youtube編集and公開(tweet_text As String, tweet_post As String, PROFILE_PATH As String, USER_ID_1 As String, USER_PAS1 As String, URL1 As String, USER_ID_2 As String, USER_PAS2 As String, youtube_explanation As String)
Dim CB As New DataObject
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
driver.FindElementByCss("#textbox").Clear
driver.FindElementByCss("#textbox").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 5)
driver.FindElementByXPath(youtube_explanation).Clear
driver.FindElementByXPath(youtube_explanation).SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 39)
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 36) <> "" Then
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[10]/ytcp-video-details-section/ytcp-video-metadata-editor/div/ytcp-video-metadata-editor-basics/div[4]/div[3]/div[1]/ytcp-video-metadata-playlists/ytcp-text-dropdown-trigger/ytcp-dropdown-trigger/div/div[2]").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByCss("#checkbox-label-" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 36) & " > span").Click
driver.FindElementByCss("#dialog > div.action-buttons.style-scope.ytcp-playlist-dialog > ytcp-button.done-button.action-button.style-scope.ytcp-playlist-dialog > div").Click
End If
driver.FindElementByXPath("//*[@id='toggle-button']/div").Click
driver.FindElementByXPath("//*[@id='text-input']").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 45)
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "ゲーム" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[2]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").Clear
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 42)
' Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/ytcp-text-menu[2]/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[3]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "動物" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByCss("#text-item-7 > ytcp-ve > div").Click
End If
driver.FindElementByCss("#save > div").Click
Application.Wait Now + TimeSerial(0, 0, 6)
' driver.ExecuteScript "window.scrollBy(0, 0);"
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
driver.FindElementByCss("#content").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytcp-video-visibility-edit-popup/tp-yt-paper-dialog/ytcp-video-visibility-select/div[2]/tp-yt-paper-radio-group/tp-yt-paper-radio-button[3]/div[2]").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#save-button > div").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#save > div").Click
Application.Wait Now + TimeSerial(0, 0, 6)
'英語字幕追加
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/translations"
driver.FindElementByCss("#add-translations-button > div").Click
If driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[205]/ytcp-ve/tp-yt-paper-item-body/div/div").Text = "英語" Then
driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[205]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
End If
If driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[13]/ytgn-video-translations-section/div[1]/ytgn-video-translations-list/div/ytgn-video-translation-row[2]/div/div[1]/div").Text = "英語" Then
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[13]/ytgn-video-translations-section/div[1]/ytgn-video-translations-list/div/ytgn-video-translation-row[2]/div/div[3]/ytgn-video-translation-cell-metadata/ytcp-button/div").Click
End If
Application.Wait Now + TimeSerial(0, 0, 3)
driver.FindElementByCss("#translated-title > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 6)
driver.FindElementByCss("#translated-description > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 41)
' driver.Window.Maximize
driver.FindElementByCss("#publish-button > div").Click
'ブログ
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 55) <> "" Then
driver.Get URL1
driver.FindElementByXPath("//*[@id='user_login']").Clear
driver.FindElementByXPath("//*[@id='user_login']").SendKeys USER_ID_2
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("//*[@id='user_pass']").SendKeys USER_PAS2
driver.FindElementByXPath("//*[@id='wp-submit']").SendKeys ks.Enter
driver.Get Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 55)
With CB
.SetText "https://youtu.be/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) ''変数のデータをDataObjectに格納する
.PutInClipboard ''DataObjectのデータをクリップボードに格納する
End With
Stop
End If
'Twitter
driver.Get "https://twitter.com/compose/tweet"
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath(tweet_text).SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 53)
Stop
driver.FindElementByXPath(tweet_post).Click
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 56) = 1 Then
driver.Get "https://metabirds.net/admin/login.php?lh=bot_top&language=ja&service_type=meta&lid=&emsg="
driver.FindElementByCss("#default_login_form > form > div:nth-child(1) > label > input").SendKeys USER_ID_1
driver.FindElementByCss("#default_login_form > form > div:nth-child(2) > label > input").SendKeys USER_PAS1
driver.FindElementByCss("#default_login_form > form > div:nth-child(3) > input.button").Click
driver.Get "https://metabirds.net/admin/bot_random.php"
driver.FindElementByCss("#message_new").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 53)
driver.FindElementByCss("#app > div > article > section:nth-child(6) > div.form_wrap > form > div:nth-child(6) > div > button").Click
End If
'前回動画更新
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 31) <> "" And Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 1) = "" Then
i = i - 1
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#textbox").Clear
driver.FindElementByCss("#textbox").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 5)
driver.FindElementByXPath(youtube_explanation).Clear
driver.FindElementByXPath(youtube_explanation).SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 39)
driver.FindElementByXPath("//*[@id='toggle-button']/div").Click
driver.FindElementByXPath("//*[@id='clear-button']/tp-yt-iron-icon").Click
driver.FindElementByXPath("//*[@id='text-input']").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 45)
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "ゲーム" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[2]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").Clear
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 42)
driver.FindElementByXPath("/html/body/ytcp-text-menu[2]/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[3]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "動物" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByCss("#text-item-7 > ytcp-ve > div").Click
End If
driver.FindElementByCss("#save > div").Click
Application.Wait Now + TimeSerial(0, 0, 6)
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/translations"
driver.FindElementByXPath("//*[@id='row-container']/div[3]/ytgn-video-translation-cell-metadata/div/button/span/span").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#translated-title > div > textarea").Clear
driver.FindElementByCss("#translated-title > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 6)
driver.FindElementByCss("#translated-description > div > textarea").Clear
driver.FindElementByCss("#translated-description > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 41)
driver.Window.Maximize
driver.FindElementByCss("#publish-button > div").Click
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[10]/ytcp-video-details-section/ytcp-video-metadata-editor/ytcp-video-metadata-editor-sidepanel/ytcp-text-dropdown-trigger[2]/ytcp-dropdown-trigger/div/div[2]/span").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/ytve-timeline/div[2]/div/ytve-endscreen-editor-timeline/ytve-timeline-base/div[2]/div[2]/ytve-endscreen-marker[5]/div").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/div[1]/div/ytve-endscreen-editor-options-panel/div[3]/div/ytve-endscreen-editor-video-element-options/tp-yt-paper-radio-group/tp-yt-paper-radio-button[3]/div[2]/div[2]/tp-yt-iron-icon").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytcp-video-pick-dialog/ytcp-dialog/tp-yt-paper-dialog/div[1]/div[2]/div/tp-yt-paper-tabs/div/div/tp-yt-paper-tab[1]/div/input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i + 1, 31)
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytcp-video-pick-dialog/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytcp-video-pick-dialog-contents/div/div/div/ytcp-entity-card").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[1]/div/div[2]/div[2]/ytcp-button/div").Click
Application.Wait Now + TimeSerial(0, 0, 4)
i = i + 1
End If
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
driver.FindElementByXPath("/html/body/ytcp-app/ytcp-entity-page/div/div/main/div/ytcp-animatable[10]/ytcp-video-details-section/ytcp-video-metadata-editor/ytcp-video-metadata-editor-sidepanel/ytcp-text-dropdown-trigger[2]/ytcp-dropdown-trigger/div/div[2]/span").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/div[1]/div/ytve-endscreen-editor-options-panel/div[2]/div/ytve-endscreen-template-picker/div/div/div/div[1]").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/ytve-timeline/div[2]/div/ytve-endscreen-editor-timeline/ytve-timeline-base/div[2]/div[2]/ytve-endscreen-marker[5]/div").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/div[1]/div/ytve-endscreen-editor-options-panel/div[3]/div/ytve-endscreen-editor-video-element-options/tp-yt-paper-radio-group/tp-yt-paper-radio-button[1]/div[2]/div[1]").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytve-editor/div[1]/div/ytve-endscreen-editor-options-panel/div[3]/div/ytve-endscreen-editor-video-element-options/tp-yt-paper-radio-group/tp-yt-paper-radio-button[3]/div[2]/div[1]/div[2]").Click
driver.FindElementByXPath("/html/body/ytcp-video-pick-dialog/ytcp-dialog/tp-yt-paper-dialog/div[1]/div[2]/div/tp-yt-paper-tabs/div/div/tp-yt-paper-tab[1]/div/input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 32)
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/ytcp-video-pick-dialog/ytcp-dialog/tp-yt-paper-dialog/div[2]/div/ytcp-video-pick-dialog-contents/div/div/div/ytcp-entity-card/div/div[1]").Click
driver.FindElementByXPath("/html/body/ytve-endscreen-modal/ytve-modal-host/ytcp-dialog/tp-yt-paper-dialog/div[1]/div/div[2]/div[2]/ytcp-button/div").Click
Application.Wait Now + TimeSerial(0, 0, 4)
End If
Next i
Set driver = Nothing
End Sub
コードの中の、「tweet_text, tweet_post」にセットする値は以下記事を参照ください。
youtubeのテキスト情報を更新し、英語字幕も更新する機能
youtubeのテキスト情報を更新し、英語字幕も更新します。
check列に1を入れた行を対象に動きます。
Sub youtube更新and字幕更新(PROFILE_PATH As String, youtube_explanation As String)
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/edit"
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#textbox").Clear
driver.FindElementByCss("#textbox").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 5)
driver.FindElementByXPath(youtube_explanation).Clear
driver.FindElementByXPath(youtube_explanation).SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 39)
driver.FindElementByXPath("//*[@id='toggle-button']/div").Click
driver.FindElementByXPath("//*[@id='clear-button']/tp-yt-iron-icon").Click
driver.FindElementByXPath("//*[@id='text-input']").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 45)
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "ゲーム" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[2]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").Clear
driver.FindElementByCss("#category-container > ytcp-form-gaming > ytcp-form-autocomplete > ytcp-dropdown-trigger > div > div.left-container.style-scope.ytcp-dropdown-trigger > input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 42)
driver.FindElementByXPath("/html/body/ytcp-text-menu[2]/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[3]/ytcp-ve/tp-yt-paper-item-body/div/div/div/yt-formatted-string/span[1]").Click
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "動物" Then
driver.FindElementByXPath("//*[@id='category']").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/ytcp-text-menu/tp-yt-paper-dialog/tp-yt-paper-listbox/tp-yt-paper-item[8]/ytcp-ve/tp-yt-paper-item-body/div/div").Click
End If
driver.FindElementByCss("#save > div").Click
Application.Wait Now + TimeSerial(0, 0, 8)
driver.Get "https://studio.youtube.com/video/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 31) & "/translations"
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='row-container']/div[3]/ytgn-video-translation-cell-metadata/div/button/span/span").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByCss("#translated-title > div > textarea").Clear
driver.FindElementByCss("#translated-title > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 6)
driver.FindElementByCss("#translated-description > div > textarea").Clear
driver.FindElementByCss("#translated-description > div > textarea").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 41)
driver.Window.Maximize
driver.FindElementByCss("#publish-button > div").Click
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 1) = ""
End If
Next i
Set driver = Nothing
End Sub
ニコニコ動画への同時投稿機能
タイトル・説明文などを流用し、ニコニコ動画へ投稿するマクロ機能も設けています。
以下記事を参照ください。
まとめ
いかがでしたでしょうか?
参考になれば幸いです。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。
コメント