From 5d64b8c7ce5b108437f076693dd513d20b8296b4 Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:04:56 +0300 Subject: [PATCH] 2022.12.27.0 XVideos: added 'Quickies'; fixed downloading. Instagram: added more enable/disable options. --- Changelog.md | 10 ++ ProgramScreenshots/SettingsSiteInstagram.png | Bin 26655 -> 28013 bytes .../API/Instagram/EditorExchangeOptions.vb | 2 + .../API/Instagram/OptionsForm.Designer.vb | 41 ++++--- SCrawler/API/Instagram/OptionsForm.vb | 2 + SCrawler/API/Instagram/SiteSettings.vb | 68 +++--------- SCrawler/API/Instagram/UserData.vb | 14 ++- SCrawler/API/XVIDEOS/SiteSettings.vb | 7 +- SCrawler/API/XVIDEOS/UserData.vb | 103 ++++++++++-------- SCrawler/My Project/AssemblyInfo.vb | 4 +- SCrawler/SettingsCLS.vb | 6 +- 11 files changed, 129 insertions(+), 128 deletions(-) diff --git a/Changelog.md b/Changelog.md index c7ba762..55073ee 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,13 @@ +# 2022.12.27.0 + +*2022-12-27* + +- Added + - XVideos: added downloading 'Quickies' + - Instagram: added more enable/disable options +- Fixed + - XVideos not downloading (sorry, I broke it in a previous release) + # 2022.12.26.0 *2022-12-26* diff --git a/ProgramScreenshots/SettingsSiteInstagram.png b/ProgramScreenshots/SettingsSiteInstagram.png index ee7e5fcfc6aa7f99bda89f6a71d2b9f18c0b840a..a532f69aaa41a5291a09b6138a1abf783ed9aa13 100644 GIT binary patch literal 28013 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 KGmPnl@c#qGC22DN diff --git a/SCrawler/API/Instagram/EditorExchangeOptions.vb b/SCrawler/API/Instagram/EditorExchangeOptions.vb index 16bb4bd..a41a067 100644 --- a/SCrawler/API/Instagram/EditorExchangeOptions.vb +++ b/SCrawler/API/Instagram/EditorExchangeOptions.vb @@ -9,10 +9,12 @@ Imports SCrawler.Plugin Namespace API.Instagram Friend Class EditorExchangeOptions + Friend Property GetTimeline As Boolean Friend Property GetStories As Boolean Friend Property GetTagged As Boolean Friend Sub New(ByVal h As ISiteSettings) With DirectCast(h, SiteSettings) + GetTimeline = CBool(.GetTimeline.Value) GetStories = CBool(.GetStories.Value) GetTagged = CBool(.GetTagged.Value) End With diff --git a/SCrawler/API/Instagram/OptionsForm.Designer.vb b/SCrawler/API/Instagram/OptionsForm.Designer.vb index e1418bd..6c59cb1 100644 --- a/SCrawler/API/Instagram/OptionsForm.Designer.vb +++ b/SCrawler/API/Instagram/OptionsForm.Designer.vb @@ -26,6 +26,7 @@ Namespace API.Instagram Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox() Me.CH_GET_TAGGED = New System.Windows.Forms.CheckBox() + Me.CH_GET_TIMELINE = New System.Windows.Forms.CheckBox() CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() TP_MAIN = New System.Windows.Forms.TableLayoutPanel() CONTAINER_MAIN.ContentPanel.SuspendLayout() @@ -39,13 +40,13 @@ Namespace API.Instagram 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 53) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 79) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) CONTAINER_MAIN.Name = "CONTAINER_MAIN" CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(260, 78) + CONTAINER_MAIN.Size = New System.Drawing.Size(260, 104) CONTAINER_MAIN.TabIndex = 0 CONTAINER_MAIN.TopToolStripPanelVisible = False ' @@ -54,26 +55,28 @@ Namespace API.Instagram TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] TP_MAIN.ColumnCount = 1 TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 0) - TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 1) + TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 1) + TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 2) + TP_MAIN.Controls.Add(Me.CH_GET_TIMELINE, 0, 0) TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill TP_MAIN.Location = New System.Drawing.Point(0, 0) TP_MAIN.Name = "TP_MAIN" - TP_MAIN.RowCount = 3 + TP_MAIN.RowCount = 4 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.Size = New System.Drawing.Size(260, 53) + TP_MAIN.Size = New System.Drawing.Size(260, 79) TP_MAIN.TabIndex = 0 ' 'CH_GET_STORIES ' Me.CH_GET_STORIES.AutoSize = True Me.CH_GET_STORIES.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 4) + Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 30) Me.CH_GET_STORIES.Name = "CH_GET_STORIES" Me.CH_GET_STORIES.Size = New System.Drawing.Size(252, 19) - Me.CH_GET_STORIES.TabIndex = 0 + Me.CH_GET_STORIES.TabIndex = 1 Me.CH_GET_STORIES.Text = "Get stories" Me.CH_GET_STORIES.UseVisualStyleBackColor = True ' @@ -81,26 +84,37 @@ Namespace API.Instagram ' Me.CH_GET_TAGGED.AutoSize = True Me.CH_GET_TAGGED.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 30) + Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 56) Me.CH_GET_TAGGED.Name = "CH_GET_TAGGED" Me.CH_GET_TAGGED.Size = New System.Drawing.Size(252, 19) - Me.CH_GET_TAGGED.TabIndex = 1 + Me.CH_GET_TAGGED.TabIndex = 2 Me.CH_GET_TAGGED.Text = "Get tagged data" Me.CH_GET_TAGGED.UseVisualStyleBackColor = True ' + 'CH_GET_TIMELINE + ' + Me.CH_GET_TIMELINE.AutoSize = True + Me.CH_GET_TIMELINE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_GET_TIMELINE.Location = New System.Drawing.Point(4, 4) + Me.CH_GET_TIMELINE.Name = "CH_GET_TIMELINE" + Me.CH_GET_TIMELINE.Size = New System.Drawing.Size(252, 19) + Me.CH_GET_TIMELINE.TabIndex = 0 + Me.CH_GET_TIMELINE.Text = "Get Timeline" + Me.CH_GET_TIMELINE.UseVisualStyleBackColor = True + ' 'OptionsForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(260, 78) + Me.ClientSize = New System.Drawing.Size(260, 104) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32 Me.KeyPreview = True Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(276, 117) + Me.MaximumSize = New System.Drawing.Size(276, 143) Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(276, 117) + Me.MinimumSize = New System.Drawing.Size(276, 143) Me.Name = "OptionsForm" Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide @@ -116,5 +130,6 @@ Namespace API.Instagram Private WithEvents CH_GET_STORIES As CheckBox Private WithEvents CH_GET_TAGGED As CheckBox + Private WithEvents CH_GET_TIMELINE As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/OptionsForm.vb b/SCrawler/API/Instagram/OptionsForm.vb index 7dee2ae..b220363 100644 --- a/SCrawler/API/Instagram/OptionsForm.vb +++ b/SCrawler/API/Instagram/OptionsForm.vb @@ -21,6 +21,7 @@ Namespace API.Instagram .MyViewInitialize(True) .AddOkCancelToolbar() With MyExchangeOptions + CH_GET_TIMELINE.Checked = .GetTimeline CH_GET_STORIES.Checked = .GetStories CH_GET_TAGGED.Checked = .GetTagged End With @@ -29,6 +30,7 @@ Namespace API.Instagram End Sub Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick With MyExchangeOptions + .GetTimeline = CH_GET_TIMELINE.Checked .GetStories = CH_GET_STORIES.Checked .GetTagged = CH_GET_TAGGED.Checked End With diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index c89a25b..798eab1 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -111,33 +111,37 @@ Namespace API.Instagram End Sub #End Region #Region "Download properties" - + Friend ReadOnly Property RequestsWaitTimer As PropertyValue Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider - + Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider - + Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider - + + Friend ReadOnly Property GetTimeline As PropertyValue + Friend ReadOnly Property GetStories As PropertyValue - + Friend ReadOnly Property GetTagged As PropertyValue + "-1 to disable"), PXML, ControlNumber(26)> Friend ReadOnly Property TaggedNotifyLimit As PropertyValue Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider #End Region #Region "Download ready" - + Friend ReadOnly Property DownloadTimeline As PropertyValue - + + Friend ReadOnly Property DownloadStories As PropertyValue + Friend ReadOnly Property DownloadTagged As PropertyValue #End Region #Region "429 bypass" @@ -207,10 +211,6 @@ Namespace API.Instagram .CookiesExtractMode = Responser.CookiesExtractModes.Response .CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll .CookiesExtractedAutoSave = False - If Not .Cookies Is Nothing Then - .Cookies.ChangedAllowInternalDrop = False - .Cookies.Changed = False - End If End With Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString} @@ -221,6 +221,7 @@ Namespace API.Instagram IG_WWW_CLAIM = New PropertyValue(www_claim, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v)) DownloadTimeline = New PropertyValue(True) + DownloadStories = New PropertyValue(True) DownloadTagged = New PropertyValue(False) RequestsWaitTimer = New PropertyValue(1000) @@ -230,6 +231,7 @@ Namespace API.Instagram SleepTimerOnPostsLimit = New PropertyValue(60000) SleepTimerOnPostsLimitProvider = New TimersChecker(10000) + GetTimeline = New PropertyValue(True) GetStories = New PropertyValue(False) GetTagged = New PropertyValue(False) TaggedNotifyLimit = New PropertyValue(200) @@ -246,48 +248,6 @@ Namespace API.Instagram UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1) ImageVideoContains = "instagram.com" End Sub - Private Structure LatestValues - Friend Hash As String - Friend Token As String - Friend AppID As String - Friend WwwClaim As String - Friend Exists As Boolean - Friend Sub New(ByVal Source As SiteSettings) - Exists = True - With Source - Hash = AConvert(Of String)(.HashTagged.Value, String.Empty) - With .Responser - Token = .Headers.Value(Header_CSRF_TOKEN) - AppID = .Headers.Value(Header_IG_APP_ID) - WwwClaim = .Headers.Value(Header_IG_WWW_CLAIM) - End With - End With - End Sub - End Structure - Private LV As LatestValues = Nothing - Friend Overrides Sub BeginEdit() - LV = New LatestValues(Me) - MyBase.BeginEdit() - End Sub - Friend Overrides Sub EndEdit() - LV = Nothing - MyBase.EndEdit() - End Sub - Friend Overloads Overrides Sub Update() - If LV.Exists Then - Dim __lv As New LatestValues(Me) - If If(Responser.Cookies?.Count, 0) > 0 Then - Dim _cookiesChanged As Boolean = If(Responser.Cookies?.Changed, False) And Responser.CookiesExists - Dim _tokensChanged As Boolean = (Not __lv.Token.IsEmptyString And Not __lv.WwwClaim.IsEmptyString And Not __lv.AppID.IsEmptyString) And - (Not LV.Token = __lv.Token Or Not LV.WwwClaim = __lv.WwwClaim Or Not LV.AppID = __lv.AppID) - If _cookiesChanged Or _tokensChanged Then DownloadTimeline.Value = True - If Not __lv.Hash.IsEmptyString And (_cookiesChanged Or _tokensChanged Or Not LV.Hash = __lv.Hash) Then DownloadTagged.Value = True - End If - End If - LV = Nothing - If Not Responser.Cookies Is Nothing Then Responser.Cookies.Changed = False - MyBase.Update() - End Sub #End Region #Region "PropertiesDataChecker" diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index a9a2f99..88ff2b5 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -21,6 +21,7 @@ Namespace API.Instagram #Region "XML Names" Private Const Name_LastCursor As String = "LastCursor" Private Const Name_FirstLoadingDone As String = "FirstLoadingDone" + Private Const Name_GetTimeline As String = "GetTimeline" Private Const Name_GetStories As String = "GetStories" Private Const Name_GetTagged As String = "GetTaggedData" Private Const Name_TaggedChecked As String = "TaggedChecked" @@ -70,16 +71,18 @@ Namespace API.Instagram Private ReadOnly PostsToReparse As List(Of PostKV) Private LastCursor As String = String.Empty Private FirstLoadingDone As Boolean = False + Friend Property GetTimeline As Boolean = True Friend Property GetStories As Boolean Friend Property GetTaggedData As Boolean #End Region #Region "Exchange options" Friend Overrides Function ExchangeOptionsGet() As Object - Return New EditorExchangeOptions(HOST.Source) With {.GetStories = GetStories, .GetTagged = GetTaggedData} + Return New EditorExchangeOptions(HOST.Source) With {.GetTimeline = GetTimeline, .GetStories = GetStories, .GetTagged = GetTaggedData} End Function Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object) If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then With DirectCast(Obj, EditorExchangeOptions) + GetTimeline = .GetTimeline GetStories = .GetStories GetTaggedData = .GetTagged End With @@ -197,21 +200,22 @@ Namespace API.Instagram AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived ThrowAny(Token) HasError = False - If CBool(MySiteSettings.DownloadTimeline.Value) And Not LastCursor.IsEmptyString Then + Dim dt As Boolean = (CBool(MySiteSettings.DownloadTimeline.Value) And GetTimeline) Or IsSavedPosts + If dt And Not LastCursor.IsEmptyString Then s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) DownloadData(LastCursor, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If - If CBool(MySiteSettings.DownloadTimeline.Value) And Not HasError Then + If dt And Not HasError Then s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) DownloadData(String.Empty, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If If FirstLoadingDone Then LastCursor = String.Empty - If MySiteSettings.BaseAuthExists() Then - If CBool(MySiteSettings.DownloadTimeline.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token) + If Not IsSavedPosts AndAlso MySiteSettings.BaseAuthExists() Then + If CBool(MySiteSettings.DownloadStories.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token) If CBool(MySiteSettings.DownloadTagged.Value) And ACheck(MySiteSettings.HashTagged.Value) And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token) End If If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify diff --git a/SCrawler/API/XVIDEOS/SiteSettings.vb b/SCrawler/API/XVIDEOS/SiteSettings.vb index 2bbc1ad..13c9c7c 100644 --- a/SCrawler/API/XVIDEOS/SiteSettings.vb +++ b/SCrawler/API/XVIDEOS/SiteSettings.vb @@ -104,10 +104,13 @@ Namespace API.XVIDEOS End Function #End Region #Region "User: get, check" - Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String + Friend Function GetUserUrlPart(ByVal User As UserData) As String Dim __user$ = User.Name.Split("_").FirstOrDefault __user &= $"/{User.Name.Replace($"{__user}_", String.Empty)}" - Return String.Format(UrlPatternUser, __user) + Return __user + End Function + Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String + Return String.Format(UrlPatternUser, GetUserUrlPart(User)) End Function Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)" Private Const URD As String = ".*?{0}{1}" diff --git a/SCrawler/API/XVIDEOS/UserData.vb b/SCrawler/API/XVIDEOS/UserData.vb index fb5f739..258a4b9 100644 --- a/SCrawler/API/XVIDEOS/UserData.vb +++ b/SCrawler/API/XVIDEOS/UserData.vb @@ -45,16 +45,7 @@ Namespace API.XVIDEOS UseInternalM3U8Function = True End Sub Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) - If Not Settings.UseM3U8 Then - 'TODELETE: XVideos m3u8 delete after debug ffmpeg x86 - 'If Not Settings.OS64 Then - ' MyMainLOG = $"XVIDEOS [{ToStringForLog()}]: The plugin only works with x64 OS." - 'Else - ' 'MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" - 'End If - MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" - Exit Sub - End If + If Not Settings.UseM3U8 Then MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" : Exit Sub If IsSavedPosts Then If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null") DownloadSavedVideos(Token) @@ -65,49 +56,63 @@ Namespace API.XVIDEOS Private Sub DownloadUserVideo(ByVal Token As CancellationToken) Dim URL$ = String.Empty Try - Dim NextPage% = 0 - Dim r$ + Dim NextPage%, d% + Dim limit% = If(DownloadTopCount, -1) + Dim r$, n$ Dim j As EContainer = Nothing Dim jj As EContainer - Dim user$ = MySettings.GetUserUrl(Me, False) + Dim user$ = MySettings.GetUserUrlPart(Me) Dim p As UserMedia Dim EnvirSet As Boolean = False - Do - ThrowAny(Token) - URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}" - r = Responser.GetResponse(URL) - If Not r.IsEmptyString Then - If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True - j = JsonDocument.Parse(r).XmlIfNothing - With j - If .Contains("videos") Then - With .Item("videos") - If .Count > 0 Then - NextPage += 1 - For Each jj In .Self - p = New UserMedia With { - .Post = jj.Value("id"), - .URL = $"https://www.xvideos.com/{jj.Value("u").StringTrimStart("/")}" - } - If Not p.Post.ID.IsEmptyString And Not jj.Value("u").IsEmptyString Then - If Not _TempPostsList.Contains(p.Post.ID) Then - _TempPostsList.Add(p.Post.ID) - _TempMediaList.Add(p) - Else - Exit Do + If ID.IsEmptyString Then GetUserID() + For i% = 0 To 1 + If i = 1 And ID.IsEmptyString Then Exit For + NextPage = 0 + d = 0 + n = IIf(i = 0, "u", "url") + Do + ThrowAny(Token) + If i = 0 Then + URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}" + Else 'Quickies + URL = $"https://www.xvideos.com/quickies-api/profilevideos/all/none/N/{ID}/{NextPage}" + End If + r = Responser.GetResponse(URL,, EDP.ReturnValue) + If Not r.IsEmptyString Then + If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True + j = JsonDocument.Parse(r).XmlIfNothing + With j + If .Contains("videos") Then + With .Item("videos") + If .Count > 0 Then + NextPage += 1 + For Each jj In .Self + p = New UserMedia With { + .Post = jj.Value("id"), + .URL = $"https://www.xvideos.com/{jj.Value(n).StringTrimStart("/")}" + } + If Not p.Post.ID.IsEmptyString And Not jj.Value(n).IsEmptyString Then + If Not _TempPostsList.Contains(p.Post.ID) Then + _TempPostsList.Add(p.Post.ID) + _TempMediaList.Add(p) + d += 1 + If limit > 0 And d = limit Then Exit Do + Else + Exit Do + End If End If - End If - Next - Continue Do - End If - End With - End If - End With - End If - If Not j Is Nothing Then j.Dispose() - Exit Do - Loop While NextPage < 100 + Next + Continue Do + End If + End With + End If + End With + End If + If Not j Is Nothing Then j.Dispose() + Exit Do + Loop While NextPage < 100 + Next If Not j Is Nothing Then j.Dispose() @@ -130,6 +135,10 @@ Namespace API.XVIDEOS If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString) End Try End Sub + Private Sub GetUserID() + Dim r$ = Responser.GetResponse($"https://www.xvideos.com/{MySettings.GetUserUrlPart(Me)}",, EDP.ReturnValue) + If Not r.IsEmptyString Then ID = RegexReplace(r, RParams.DMS("""id_user"":(\d+)", 1, EDP.ReturnValue)) + End Sub Private Sub DownloadSavedVideos(ByVal Token As CancellationToken) Dim URL$ = MySettings.SavedVideosPlaylist.Value Try diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index e8fc767..e6cd1ab 100644 --- a/SCrawler/My Project/AssemblyInfo.vb +++ b/SCrawler/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index d06b9e9..184f873 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -23,13 +23,10 @@ Friend Class SettingsCLS : Implements IDisposable Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword" Friend ReadOnly Design As XmlFile Private ReadOnly MyXML As XmlFile - Private ReadOnly OS64 As Boolean Private ReadOnly FfmpegExists As Boolean Friend ReadOnly FfmpegFile As SFile Friend ReadOnly Property UseM3U8 As Boolean Get - 'TODELETE: SETTINGS m3u8 delete after debug ffmpeg x86 - 'Return OS64 And FfmpegExists Return FfmpegExists End Get End Property @@ -69,7 +66,6 @@ Friend Class SettingsCLS : Implements IDisposable End Sub Friend Sub New() RemoveUnusedPlugins() - OS64 = Environment.Is64BitOperatingSystem FfmpegFile = "ffmpeg.exe" FfmpegExists = FfmpegFile.Exists @@ -83,7 +79,7 @@ Friend Class SettingsCLS : Implements IDisposable LastCollections = New List(Of String) FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML) - If OS64 And Not FfmpegExists Then + If Not FfmpegExists Then If FFMPEGNotification.Value AndAlso MsgBoxE(New MMessage("[ffmpeg.exe] is missing", "ffmpeg.exe", {"OK", New MsgBoxButton("Disable notification") With { .IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With {