Compare commits
17 Commits
Author | SHA1 | Date |
---|---|---|
Yuriy | b1bb3c2449 | 6 months ago |
Yuriy | 05348079e9 | 6 months ago |
Yuriy | 52917adf57 | 6 months ago |
Yuriy | 97d9ecc84f | 6 months ago |
Yuriy | 211c3ea4fa | 6 months ago |
Yuriy | cb42cd069f | 6 months ago |
Yuriy | 2dd27065be | 6 months ago |
Yuriy | dacd8f353a | 6 months ago |
Yuriy | b9b0b14b29 | 6 months ago |
Yuriy | a73eaf0e17 | 6 months ago |
Yuriy | 44b343a0a7 | 6 months ago |
Yuriy | a008541c7c | 6 months ago |
Yuriy | 4bd4e1f7c3 | 6 months ago |
Yuriy | aae8820e37 | 6 months ago |
Yuriy | 4a7e4658b2 | 6 months ago |
Yuriy | a2ecaa50fa | 6 months ago |
Yuriy | f988efb221 | 6 months ago |
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
@ -0,0 +1,84 @@
|
|||||||
|
;---ENVIRONMENT---------------------------------------------------------------------
|
||||||
|
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
|
||||||
|
;#Warn ; Enable warnings to assist with detecting common errors.
|
||||||
|
;DetectHiddenWindows, On
|
||||||
|
#SingleInstance, Force
|
||||||
|
DetectHiddenWindows, ON
|
||||||
|
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
|
||||||
|
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
|
||||||
|
;SetKeyDelay, 500
|
||||||
|
CoordMode, ToolTip, Screen
|
||||||
|
CoordMode, Mouse, Screen
|
||||||
|
; #NoTrayIcon
|
||||||
|
; Menu, Tray, Icon, RMScriptManager.ico
|
||||||
|
|
||||||
|
;---Notes/Extra Info/#Includes------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;---VARIABLES-----------------------------------------------------------------------
|
||||||
|
ScriptName = Freedomain Livestream Scheduler
|
||||||
|
|
||||||
|
AHKFilepath = %A_ScriptDir%\%ScriptName%.ahk
|
||||||
|
Exefilepath = %A_ScriptDir%\%ScriptName%.exe
|
||||||
|
icopath = %A_ScriptDir%\Assets\Icon.ico
|
||||||
|
VersionIniFP = %A_ScriptDir%\Version.ini
|
||||||
|
|
||||||
|
|
||||||
|
;---MAIN SCRIPT---------------------------------------------------------------------
|
||||||
|
|
||||||
|
; Bump the version number in the version.ini file
|
||||||
|
IniRead, VersionNumber, %VersionIniFP%, %ScriptName%, Version, 0.0 ; , Filename, Section, Key [, Default]
|
||||||
|
VersionNumber += .01
|
||||||
|
VersionNumber := SubStr(VersionNumber, 1, 4)
|
||||||
|
|
||||||
|
IniWrite, %VersionNumber%, %VersionIniFP%,%ScriptName%, Version
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Kill any active intances of the uploaders so the .exe file can be overwriten by the compilation
|
||||||
|
process, close, %ScriptName%.exe
|
||||||
|
|
||||||
|
sleep, 1000
|
||||||
|
|
||||||
|
; Delete the .exe file so it can be repalced
|
||||||
|
if(FileExist(Exefilepath)){
|
||||||
|
FileDelete, %Exefilepath%
|
||||||
|
if(ErrorLevel){
|
||||||
|
msgbox, failed to delete Exe file. Please delete manually and re-run the compiler.
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(!FileExist(AHKFilepath)){
|
||||||
|
msgbox, %AHKFilepath% does not exist`nExiting
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(!FileExist(icopath)){
|
||||||
|
msgbox, %icopath% does not exist`nExiting
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
run, %comspec% /c ""C:\Program Files\AutoHotkey\Compiler\Ahk2Exe.exe" /in "%AHKFilepath%" /out "%exefilepath%" /icon "%icopath%""
|
||||||
|
|
||||||
|
|
||||||
|
; OldNotify(ScriptToCompile,"Compiled Successfully",5)
|
||||||
|
; sleep, 5000
|
||||||
|
ExitApp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;---FUNCTIONS-----------------------------------------------------------------------
|
@ -0,0 +1,84 @@
|
|||||||
|
;---ENVIRONMENT---------------------------------------------------------------------
|
||||||
|
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
|
||||||
|
;#Warn ; Enable warnings to assist with detecting common errors.
|
||||||
|
;DetectHiddenWindows, On
|
||||||
|
#SingleInstance, Force
|
||||||
|
DetectHiddenWindows, ON
|
||||||
|
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
|
||||||
|
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
|
||||||
|
;SetKeyDelay, 500
|
||||||
|
CoordMode, ToolTip, Screen
|
||||||
|
CoordMode, Mouse, Screen
|
||||||
|
; #NoTrayIcon
|
||||||
|
; Menu, Tray, Icon, RMScriptManager.ico
|
||||||
|
|
||||||
|
;---Notes/Extra Info/#Includes------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;---VARIABLES-----------------------------------------------------------------------
|
||||||
|
ScriptName = Freedomain Livestream Scheduler
|
||||||
|
|
||||||
|
AHKFilepath = %A_ScriptDir%\%ScriptName%.ahk
|
||||||
|
Exefilepath = %A_ScriptDir%\%ScriptName%.exe
|
||||||
|
icopath = %A_ScriptDir%\Assets\Icon.ico
|
||||||
|
VersionIniFP = %A_ScriptDir%\Version.ini
|
||||||
|
|
||||||
|
|
||||||
|
;---MAIN SCRIPT---------------------------------------------------------------------
|
||||||
|
|
||||||
|
; Bump the version number in the version.ini file
|
||||||
|
IniRead, VersionNumber, %VersionIniFP%, Livestream-Scheduler, Version, 0.0 ; , Filename, Section, Key [, Default]
|
||||||
|
VersionNumber += .01
|
||||||
|
VersionNumber := SubStr(VersionNumber, 1, 4)
|
||||||
|
|
||||||
|
IniWrite, %VersionNumber%, %VersionIniFP%,Livestream-Scheduler, Version
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Kill any active intances of the uploaders so the .exe file can be overwriten by the compilation
|
||||||
|
process, close, %ScriptName%.exe
|
||||||
|
|
||||||
|
sleep, 1000
|
||||||
|
|
||||||
|
; Delete the .exe file so it can be repalced
|
||||||
|
if(FileExist(Exefilepath)){
|
||||||
|
FileDelete, %Exefilepath%
|
||||||
|
if(ErrorLevel){
|
||||||
|
msgbox, failed to delete Exe file. Please delete manually and re-run the compiler.
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(!FileExist(AHKFilepath)){
|
||||||
|
msgbox, %AHKFilepath% does not exist`nExiting
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(!FileExist(icopath)){
|
||||||
|
msgbox, %icopath% does not exist`nExiting
|
||||||
|
ExitApp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
run, %comspec% /c ""C:\Program Files\AutoHotkey\Compiler\Ahk2Exe.exe" /in "%AHKFilepath%" /out "%exefilepath%" /icon "%icopath%""
|
||||||
|
|
||||||
|
|
||||||
|
; OldNotify(ScriptToCompile,"Compiled Successfully",5)
|
||||||
|
; sleep, 5000
|
||||||
|
ExitApp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;---FUNCTIONS-----------------------------------------------------------------------
|
@ -1 +1 @@
|
|||||||
Subproject commit b8ffb10db187c70219c594ddfe7cdebc6885d552
|
Subproject commit cf56ae8136def874793895733d595349b20d9c19
|
@ -0,0 +1,119 @@
|
|||||||
|
|
||||||
|
|
||||||
|
MediaManagerUpdate:
|
||||||
|
; ------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
CurrentSite := "Media Manager"
|
||||||
|
SaveOrPostProgress(Message:="Navigating to Website",PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
|
||||||
|
IniRead, FDRRadioURL, %SettingsIniFilepath%, General, FDRRadioURL, %A_Space%
|
||||||
|
if(FDRRadioURL = ""){
|
||||||
|
Message = FDRRadioURL is blank in Settings.ini. Please add it to the following location: [General]`nFDRRadioURL=
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FDRRadioBaseURL := "https://" . ExtractBaseURL(FDRRadioURL)
|
||||||
|
FDRRadioURL := FDRRadioBaseURL . "/manage/"
|
||||||
|
|
||||||
|
Status := NavigateFromBaseURLTo(FDRRadioURL)
|
||||||
|
if(Status)
|
||||||
|
Return
|
||||||
|
|
||||||
|
CheckForAlerts()
|
||||||
|
|
||||||
|
Message = Checking Login Status
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
Try, PageURL := driver.Url
|
||||||
|
if(InStr(PageURL, "/NotLoggedIn")){
|
||||||
|
Message = Logged out. Trying to log back in.
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
Xpath = (//span[contains(text(),'Login')])[1]
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
|
||||||
|
sleep, 1000
|
||||||
|
|
||||||
|
Try, PageURL := driver.Url
|
||||||
|
if(InStr(PageURL, "/NotLoggedIn")){
|
||||||
|
Message = Failed to log back in automatically. Please login and try again.
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Message = Updating Redirect URLs
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
; URL for each redirect
|
||||||
|
LocalsLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=738"
|
||||||
|
RumbleLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=739"
|
||||||
|
OdyseeLiveRedirectURL := FDRRadioBaseURL . "/manage/#/Redirects/Modify?redirectID=742"
|
||||||
|
|
||||||
|
; read the url's from the status file
|
||||||
|
IniRead, LocalsLivestreamURL, %PostStatusesFilepath%, Livestream,LocalsLivestreamURL, %A_Space%
|
||||||
|
IniRead, RumbleLivestreamURL, %PostStatusesFilepath%, Livestream,RumbleLivestreamURL, %A_Space%
|
||||||
|
IniRead, OdyseeLivestreamURL, %PostStatusesFilepath%, Livestream,OdyseeLivestreamURL, %A_Space%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(LocalsLivestreamURL)
|
||||||
|
UpdateMediaManagerRedirect(LocalsLiveRedirectURL, LocalsLivestreamURL)
|
||||||
|
else, {
|
||||||
|
Message = LocalsLivestreamURL is blank. Skipping
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(RumbleLivestreamURL)
|
||||||
|
UpdateMediaManagerRedirect(RumbleLiveRedirectURL, RumbleLivestreamURL)
|
||||||
|
else, {
|
||||||
|
Message = RumbleLivestreamURL is blank. Skipping
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(OdyseeLivestreamURL)
|
||||||
|
UpdateMediaManagerRedirect(OdyseeLiveRedirectURL, OdyseeLivestreamURL)
|
||||||
|
else, {
|
||||||
|
Message = OdyseeLivestreamURL is blank. Skipping
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UpdateMediaManagerRedirect(MediaManagerRedirectPageURL, RedirectURL){
|
||||||
|
|
||||||
|
try, driver.Get(MediaManagerRedirectPageURL) ;Open selected URL
|
||||||
|
try, driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
|
||||||
|
|
||||||
|
Xpath = (//input[@id='destinationURL'])[1]
|
||||||
|
Status := Selenium_LoopToSendValueToXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=RedirectURL, ClearElement := 1)
|
||||||
|
|
||||||
|
|
||||||
|
; Snippet to for check:
|
||||||
|
if (ConfirmBeforeSubmit && ConfirmBeforeSubmitMsgboxFunc() != true) {
|
||||||
|
Message = User Selected STOP button when asked for confirmation. Cancelling Rest of Site Upload.
|
||||||
|
SaveOrPostProgress(Message:=Message, PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
; Save button
|
||||||
|
Xpath = (//span[contains(text(),'Save')])[1]
|
||||||
|
Status := Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
if(Status){
|
||||||
|
Message = Failed to click Save button
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
Sleep, 1000
|
||||||
|
Return "Success"
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,154 @@
|
|||||||
|
|
||||||
|
OdyseeGrabURL:
|
||||||
|
Iniread, OdyseeURLSLUG, %PostStatusesFilepath%, Livestream,OdyseeURLSLUG, %A_Space%
|
||||||
|
|
||||||
|
if(OdyseeURLSLUG = ""){
|
||||||
|
Message = OdyseeURLSLug is empty in the Livestream.ini file.
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Status := NavigateFromBaseURLTo("https://odysee.com/$/livestream")
|
||||||
|
if(Status)
|
||||||
|
Return
|
||||||
|
|
||||||
|
; click on Local Setup button to switch windows
|
||||||
|
Xpath = //span[contains(text(),'Local Setup')]
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
|
||||||
|
|
||||||
|
Xpath = //label[normalize-space()='Stream server']
|
||||||
|
try, Status := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text
|
||||||
|
|
||||||
|
if(!Status){
|
||||||
|
Message = Failed to switch to "Stream Server" page
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Message = Waiting for Livestream Created Confirmation Popup
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
Xpath = //h2[normalize-space()='Livestream Created']
|
||||||
|
|
||||||
|
Loop, 60 {
|
||||||
|
|
||||||
|
try, Status := ElementInnerText := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text
|
||||||
|
if(Status = "Livestream Created")
|
||||||
|
break
|
||||||
|
else, {
|
||||||
|
sleep, 1000
|
||||||
|
Continue
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
Message = Grabbing Livestream URL from Livestream Settings Page
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
/*
|
||||||
|
; Grab and Format the livestream URL
|
||||||
|
Xpath = //li[@role='link']
|
||||||
|
Loop, 60 {
|
||||||
|
URLSLUG := GetHTMLValueFromXpathOuterHTML(XPATH, "href")
|
||||||
|
if(URLSLug = "Failed"){
|
||||||
|
Message = Failed to Grab URL SLug from confirmation popup
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
; Msgbox % "URLSLug: " URLSLug
|
||||||
|
if(InStr(URLSLug, OdyseeLivestreamSlug))
|
||||||
|
break
|
||||||
|
|
||||||
|
if(A_Index = 60){
|
||||||
|
Message = Odysee did not generate permanant livestream URL after 1 minute of waiting. Congestion Issues?
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep, 1000
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/*; Message =
|
||||||
|
Xpath = //span[contains(text(),'View Livestream Settings')]
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=5,SleepLength:=1000)
|
||||||
|
if(Status){
|
||||||
|
Message = Failed to click on View Livestream Settigns Button
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
; Double check that we're on the right page.
|
||||||
|
Xpath = //label[normalize-space()='Stream server']
|
||||||
|
try InnerText := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text
|
||||||
|
if(InnerText != "Stream server"){
|
||||||
|
Message = Failed to Navigate to View Livestream Settings Page
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Message = Waiting for Livestream to get confirmed and URL to be generated`nWill Give up after 5 minutes
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
|
||||||
|
Xpath = //div[@class='section']//li[1]
|
||||||
|
Loop, 100 {
|
||||||
|
|
||||||
|
if(A_Index = 100){
|
||||||
|
Message = Failed to grab URL after 5 minutes of waiting.
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
Try ElementOuterHTML := driver.findelementbyxpath(Xpath).Attribute("outerHTML") ;XPATH-ID & Tag
|
||||||
|
|
||||||
|
if(!InStr(ElementOuterHTML, OdyseeURLSLUG)){
|
||||||
|
Sleep, 5000
|
||||||
|
Continue
|
||||||
|
; Message = Failed to Grab Livestream URL. Please copy and paste it manually.
|
||||||
|
; SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
; return
|
||||||
|
|
||||||
|
}
|
||||||
|
else, {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
; Clipboard := OdyseeURLSLUG
|
||||||
|
; Msgbox % "OdyseeURLSLUG: " OdyseeURLSLUG
|
||||||
|
; Clipboard := ElementOuterHTML
|
||||||
|
; Msgbox % "ElementOuterHTML: " ElementOuterHTML
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Xpath = //div[@class='section']//li[1]
|
||||||
|
URLSLUG := GetHTMLValueFromXpathOuterHTML(XPATH, "href")
|
||||||
|
if(URLSLUG = "Failed"){
|
||||||
|
Message = Failed to Grab Livestream URL from outerHTML of livestream element.
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
OdyseeLivestreamURL := "https://odysee.com" . URLSLug
|
||||||
|
; Msgbox % "OdyseeLivestreamURL: " OdyseeLivestreamURL
|
||||||
|
|
||||||
|
; Message = URL Slug Grabbed from Confirmation Popup: %URLSLug%
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
; OdyseeLivestreamURL := "https://odysee.com" . URLSLug
|
||||||
|
|
||||||
|
|
||||||
|
IniWrite, %OdyseeLivestreamURL%, %PostStatusesFilepath%, Livestream,OdyseeLivestreamURL
|
@ -0,0 +1,98 @@
|
|||||||
|
RumbleSetRTMP:
|
||||||
|
;------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
CurrentSite := "Rumble Studio"
|
||||||
|
|
||||||
|
Status := NavigateFromBaseURLTo("https://studio.rumble.com/settings/connections")
|
||||||
|
if(Status)
|
||||||
|
Return
|
||||||
|
|
||||||
|
try driver.executeScript("return document.readyState").equals("complete") ; wait until page loads completely before proceeding
|
||||||
|
|
||||||
|
CheckForAlerts()
|
||||||
|
|
||||||
|
Message = Inputting Custom RTMP Settings into Rumble Studio
|
||||||
|
SaveOrPostProgress(Message,PostType:="Tooltip,ErrorLoggingTextFile,DiscordErrorLogging")
|
||||||
|
|
||||||
|
|
||||||
|
IniRead, LocalsRTMPURL, %PostStatusesFilepath%, Livestream,LocalsRTMPURL, %A_Space%
|
||||||
|
IniRead, LocalsRTMPKey, %PostStatusesFilepath%, Livestream,LocalsRTMPKey, %A_Space%
|
||||||
|
|
||||||
|
IniRead, OdyseeRTMPKey, %PostStatusesFilepath%, Livestream,OdyseeRTMPKey, %A_Space%
|
||||||
|
IniRead, OdyseeRTMPURL, %PostStatusesFilepath%, Livestream,OdyseeRTMPURL, %A_Space%
|
||||||
|
|
||||||
|
|
||||||
|
if(LocalsRTMPURL = ""){
|
||||||
|
Message = Skipping. No LocalsRTMPURL in Status.ini file
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
if(OdyseeRTMPURL = ""){
|
||||||
|
Message = Skipping. No OdyseeRTMPURL in Status.ini file
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loop, 10 {
|
||||||
|
|
||||||
|
; IndexPlusOne := A_index + 1
|
||||||
|
IndexMinusOne := A_index - 1
|
||||||
|
Xpath = (//div[@class='flex shrink-0 items-center gap-x-4'])[%A_index%]
|
||||||
|
XpathCheckbox = (//img[@alt='More options'])[%IndexMinusOne%]
|
||||||
|
|
||||||
|
|
||||||
|
try SecondaryPlatformCheckboxName := driver.findelementbyxpath(Xpath).Attribute("innerText") ;XPATH Inner Text
|
||||||
|
|
||||||
|
if(SecondaryPlatformCheckboxName = "LOCALS RTMP USE" OR SecondaryPlatformCheckboxName = "ODYSEE RTMP"){
|
||||||
|
|
||||||
|
if(SecondaryPlatformCheckboxName = "LOCALS RTMP USE"){
|
||||||
|
SiteRTMPURL := LocalsRTMPURL
|
||||||
|
SiteRTMPKey := LocalsRTMPKey
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SecondaryPlatformCheckboxName = "ODYSEE RTMP"){
|
||||||
|
SiteRTMPURL := OdyseeRTMPURL
|
||||||
|
SiteRTMPKey := OdyseeRTMPKey
|
||||||
|
}
|
||||||
|
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=XpathCheckbox,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
if(Status){
|
||||||
|
Message = Failed to click into 3 dot menu for %SecondaryPlatformCheckboxName%
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
|
||||||
|
; click Edit RTMP in the popup menu
|
||||||
|
Xpath = (//span[normalize-space()='Edit RTMP'])[1]
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
if(Status){
|
||||||
|
Message = Failed to click into 3 dot menu for %SecondaryPlatformCheckboxName%
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
; Input New RTMP Info
|
||||||
|
XpathRTMP = (//input[@placeholder='Enter the RTMP URL'])[1]
|
||||||
|
XpathStreamkey = (//input[@placeholder='Enter the stream key'])[1]
|
||||||
|
|
||||||
|
Status := Selenium_LoopToSendValueToXpath(Xpath:=XpathRTMP,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=SiteRTMPURL,ClearElement:=1)
|
||||||
|
Status := Selenium_LoopToSendValueToXpath(Xpath:=XpathStreamkey,NumOfLoops:=2,SleepLength:=1000,StringTextContent:=SiteRTMPKey,ClearElement:=1)
|
||||||
|
|
||||||
|
; click save button
|
||||||
|
Xpath = (//button[@class='rounded-full block px-6 py-2 bg-primary hover:brightness-[0.92] cursor-pointer'])[1]
|
||||||
|
Status := Selenium_LoopToClickXpath(Xpath:=Xpath,NumOfLoops:=2,SleepLength:=1000)
|
||||||
|
if(Status){
|
||||||
|
Message = Failed to Click Save Button for %SecondaryPlatformCheckboxName% modified RMTP Settings
|
||||||
|
SaveOrPostProgress(Message:=Message,PostType:="Tooltip,ErrorLoggingTextFile,ErrorSummaryVar,DiscordErrorLogging")
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RumbleCustomRTMPs := "Success"
|
||||||
|
IniWrite, %RumbleCustomRTMPs%, %PostStatusesFilepath%, Livestream,RumbleCustomRTMPs
|
@ -1,3 +1,13 @@
|
|||||||
# Freedomain-Livestream-Scheduler
|
# Freedomain-Livestream-Scheduler
|
||||||
|
|
||||||
Livestream Scheduler written for the [Freedomain Philosophy Show](https://freedomain.com/)
|
Livestream Scheduler written for the [Freedomain Philosophy Show](https://freedomain.com/)
|
||||||
|
|
||||||
|
![Alt text](Assets/Preview.png "Screenshot of Main Window")
|
||||||
|
|
||||||
|
## Features
|
||||||
|
Automated scheduling of livestreams on the following platforms using Selenium Chrome automation.
|
||||||
|
* Odysee
|
||||||
|
* Locals
|
||||||
|
* Rumble
|
||||||
|
|
||||||
|
- The RTMP information from each platform will be grabbed at the end of the schedule and then input into Rumble Studio for Livestreaming.
|
Binary file not shown.
Loading…
Reference in New Issue