FIRE実現のために、ニコニコ動画投稿にて副業を実践しているものの、手間がかかって思うように捗らないという方、多いのではないかと思います。
そこで、エクセルマクロ(VBA)でニコニコ動画への投稿・更新作業を自動化・効率化するツールを作成しましたので、シェアします。
自動投稿する機能や、クリエーター奨励プログラムへの登録を自動設定する機能など、色々な機能を実装しました。
参考になれば幸いです。
エクセルブックの紹介
エクセルにて、以下のような管理台帳シートを作って、当該シートを用いて、動画投稿や更新を管理します。
実際のマクロ入りブックは以下です。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。
ニコニコ動画への動画投稿効率化ツール(VBAマクロ)の紹介
マクロの初期設定
まず、初期設定が必要です。
まず、以下記事を参考に、Seleniumの設定をします。
基本機能
動画投稿する機能
以下の通り、動画を新規投稿する機能を設けています。
check列に1を入れた行を対象に動きます。
エクセルの、「日本語タイトル」をタイトルにセット
「ニコニコ説明文」を説明文にセット
また、前回動画の説明文も更新しに行きます。
Sub ニコニコ動画アップロード(PROFILE_PATH As String, FILE_PATH As String)
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Start "chrome"
For i = 3 To Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 31).End(xlUp).Row
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
driver.ExecuteScript ("window.open()")
driver.SwitchToNextWindow
driver.Get "https://www.upload.nicovideo.jp/garage/upload"
Application.Wait Now + TimeSerial(0, 0, 5)
driver.FindElementByCss("#root > div > div.css-115o6j6 > div > div.css-12krktm > div.css-omndbj > input").SendKeys FILE_PATH & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 2)
driver.FindElementByXPath("//*[@id='root']/div/div[3]/div/div[2]/div[2]/div/div[2]/input").SendKeys ks.Control, "a"
driver.FindElementByXPath("//*[@id='root']/div/div[3]/div/div[2]/div[2]/div/div[2]/input").SendKeys ks.Delete
driver.FindElementByXPath("//*[@id='root']/div/div[3]/div/div[2]/div[2]/div/div[2]/input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 5)
driver.FindElementByCss("#root > div > div.css-r6lg6c.css-81qgnv > div > div.css-cqvejz > div.css-fx35lp.css-1mth1hl > div.css-15c4pjt > div > div.ql-container.ql-snow > div.ql-editor.ql-blank > p").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 50)
Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 46) = "sm" & Mid(driver.Url, 47, 8)
driver.FindElementByXPath("//*[@id='root']/div/div[3]/div/div[2]/div[4]/fieldset/div/label/span[1]/span[1]/input").Click
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 10) = "ゲーム" Then
driver.FindElementByCss("#mui-component-select-genreKey").Click
Application.Wait Now + TimeSerial(0, 0, 1)
driver.FindElementByXPath("/html/body/div[6]/div[3]/ul/li[16]").Click
End If
driver.FindElementByXPath("/html/body/div[1]/div/div[3]/div/div[2]/div[7]/div[2]/form/div/div/div/input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 49)
driver.FindElementByXPath("/html/body/div[1]/div/div[3]/div/div[2]/div[7]/div[2]/form/div/div/div/div/button/span[1]").Click
driver.FindElementByXPath("/html/body/div[1]/div/div[3]/div/div[2]/div[14]/button/span[1]").Click
driver.FindElementByXPath("//*[@id='root']/div/div[3]/div/div[2]/div[13]/fieldset/div/label/span[2]").Click
driver.FindElementByXPath("//*[@id='mui-component-select-communityId']").Click
driver.FindElementByXPath("//*[@id='menu-communityId']/div[3]/ul/li[2]").Click
driver.ExecuteScript ("window.open()")
driver.SwitchToNextWindow
'過去動画更新
driver.Get "https://www.nicovideo.jp/watch/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 46) & "/edit/owner_comment?edit_from=button&easy=1&ref=pc_watch_uploadermenu"
driver.FindElementByCss("#nicos_jump").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 47)
driver.FindElementByCss("body > div.BaseLayout-main > section > form > p.WatchNicoscriptEasyEditPage-formSubmit > button").Click
driver.Get "https://www.upload.nicovideo.jp/garage/videos?modalEditFileId=" & Mid(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 46), 3, 30) & "&keyword=&sortKey=registeredAt&sortOrder=desc&page=1&pageSize=20"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys ks.Control, "a"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys ks.Delete
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 5)
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys ks.Control, "a"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys ks.Delete
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i - 1, 50)
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[1]/div/button/span[1]/span").Click
driver.FindElementByXPath("/html/body/div[6]/div[3]/div/div[3]/div/button[2]").Click
Application.Wait Now + TimeSerial(0, 0, 2)
End If
Next i
End Sub
動画内容を更新する機能
以下の通り、タイトルや説明文を、エクセル上で修正した内容で更新する機能を設けています。
check列に1を入れた行を対象に動きます。
Sub ニコニコ動画_更新and次の動画登録(PROFILE_PATH As String)
Set driver = Nothing
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("動画管理.xlsx").Sheets("リスト").Cells(Rows.Count, 6).End(xlUp).Row
If Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 1) <> "" Then
driver.Get "https://www.nicovideo.jp/watch/" & Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 46) & "/edit/owner_comment?edit_from=button&easy=1&ref=pc_watch_uploadermenu"
driver.FindElementByCss("#nicos_jump").SendKeys Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 47)
driver.FindElementByCss("body > div.BaseLayout-main > section > form > p.WatchNicoscriptEasyEditPage-formSubmit > button").Click
driver.Get "https://www.upload.nicovideo.jp/garage/videos?modalEditFileId=" & Mid(Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 46), 3, 30) & "&keyword=&sortKey=registeredAt&sortOrder=desc&page=1&pageSize=20"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys ks.Control, "a"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys ks.Delete
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[1]/div/div[2]/input").SendKeys Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 5)
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys ks.Control, "a"
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys ks.Delete
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div[1]").SendKeys Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 50)
driver.FindElementByXPath("/html/body/div[4]/div[3]/div/div[1]/div/button/span[1]/span").Click
driver.FindElementByXPath("/html/body/div[6]/div[3]/div/div[3]/div/button[2]").Click
Workbooks("動画管理.xlsx").Sheets("リスト").Cells(i, 1) = ""
Application.Wait Now + TimeSerial(0, 0, 2)
End If
Next i
Set driver = Nothing
End Sub
クリエーター奨励プログラムへ登録機能
以下の通り、クリエーター奨励プログラムへ登録する機能を設けています。
ニコニコ動画の収益化条件となっています。
動画投稿直後は動画の処理待ちとなっていて、クリエーター奨励プログラムへの登録はできないのですが、マクロ実行後、1分ごとに、動画の処理が終わっていないか見に行って、終わり次第処理を開始します。
あわせて、動画のページを開いて、7~10個目のタグも設定します。
check列に1を入れた行を対象に動きます。
Sub ニコニコ動画_クリエーター奨励登録(PROFILE_PATH As String)
Set driver = Nothing
Dim myBy As New By
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
For i = 3 To Workbooks("動画管理.xlsm").Sheets("リスト").Cells(Rows.Count, 6).End(xlUp).Row
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 1) <> "" Then
Stmp = ""
Do Until Stmp = 1
driver.Get "https://commons.nicovideo.jp/tree/edit/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 46)
If driver.IsElementPresent(myBy.Class("error-msg")) Then
Application.Wait Now + TimeSerial(0, 1, 0)
Else
driver.FindElementByCss("#original_check").Click
driver.FindElementByCss("#send_check").Click
driver.Get "https://commons.nicovideo.jp/cpp/application/?site_id=nicovideo&creation_id=" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 46)
driver.FindElementByCss("#next > a").Click
driver.FindElementByCss("#next > a").Click
driver.FindElementByCss("#next > a").Click
driver.FindElementByCss("#next > a").Click
driver.FindElementByCss("#Column01 > div.submit-area > form > p > label > span").Click
driver.FindElementByCss("#apply_submit").Click
driver.Get "https://www.nicovideo.jp/watch/" & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 46)
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div[3]/div[1]/div[4]/div[1]/div/div/button/div").Click
Application.Wait Now + TimeSerial(0, 0, 2)
Stmp = ""
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 17) <> "" Then
Stmp = Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 17)
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 18) <> "" Then
Stmp = Stmp & " " & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 18)
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 19) <> "" Then
Stmp = Stmp & " " & Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 19)
End If
If Workbooks("動画管理.xlsm").Sheets("リスト").Cells(i, 20) <> "" Then
Stmp = Stmp & " " & Mid(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(66, 20), 1, InStr(Workbooks("動画管理.xlsm").Sheets("リスト").Cells(66, 20), " ") - 1)
End If
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div[3]/div[1]/div[4]/div[2]/div/div[1]/div/div/input").SendKeys Stmp
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div[3]/div[1]/div[4]/div[2]/div/div[1]/div/button").Click
Application.Wait Now + TimeSerial(0, 0, 2)
Stmp = 1
End If
Loop
End If
Next i
Set driver = Nothing
End Sub
youtubeへの同時投稿機能
タイトル・説明文などを流用し、youtubeへの動画投稿を自動化・効率化するマクロ機能も設けています。
以下記事を参照ください。
まとめ
いかがでしたでしょうか?
参考になれば幸いです。
本マクロブックのサポートやカスタマイズについては、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。
コメント