mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-14 15:52:18 +00:00
2022.12.27.0
XVideos: added 'Quickies'; fixed downloading. Instagram: added more enable/disable options.
This commit is contained in:
10
Changelog.md
10
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.0
|
||||||
|
|
||||||
*2022-12-26*
|
*2022-12-26*
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
@@ -9,10 +9,12 @@
|
|||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Namespace API.Instagram
|
Namespace API.Instagram
|
||||||
Friend Class EditorExchangeOptions
|
Friend Class EditorExchangeOptions
|
||||||
|
Friend Property GetTimeline As Boolean
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTagged As Boolean
|
Friend Property GetTagged As Boolean
|
||||||
Friend Sub New(ByVal h As ISiteSettings)
|
Friend Sub New(ByVal h As ISiteSettings)
|
||||||
With DirectCast(h, SiteSettings)
|
With DirectCast(h, SiteSettings)
|
||||||
|
GetTimeline = CBool(.GetTimeline.Value)
|
||||||
GetStories = CBool(.GetStories.Value)
|
GetStories = CBool(.GetStories.Value)
|
||||||
GetTagged = CBool(.GetTagged.Value)
|
GetTagged = CBool(.GetTagged.Value)
|
||||||
End With
|
End With
|
||||||
|
|||||||
41
SCrawler/API/Instagram/OptionsForm.Designer.vb
generated
41
SCrawler/API/Instagram/OptionsForm.Designer.vb
generated
@@ -26,6 +26,7 @@ Namespace API.Instagram
|
|||||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||||
Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox()
|
Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_GET_TAGGED = 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()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
@@ -39,13 +40,13 @@ Namespace API.Instagram
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
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.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
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.TabIndex = 0
|
||||||
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
@@ -54,26 +55,28 @@ Namespace API.Instagram
|
|||||||
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
TP_MAIN.ColumnCount = 1
|
TP_MAIN.ColumnCount = 1
|
||||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
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_STORIES, 0, 1)
|
||||||
TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 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.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
TP_MAIN.Name = "TP_MAIN"
|
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.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.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
|
TP_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
'CH_GET_STORIES
|
'CH_GET_STORIES
|
||||||
'
|
'
|
||||||
Me.CH_GET_STORIES.AutoSize = True
|
Me.CH_GET_STORIES.AutoSize = True
|
||||||
Me.CH_GET_STORIES.Dock = System.Windows.Forms.DockStyle.Fill
|
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.Name = "CH_GET_STORIES"
|
||||||
Me.CH_GET_STORIES.Size = New System.Drawing.Size(252, 19)
|
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.Text = "Get stories"
|
||||||
Me.CH_GET_STORIES.UseVisualStyleBackColor = True
|
Me.CH_GET_STORIES.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
@@ -81,26 +84,37 @@ Namespace API.Instagram
|
|||||||
'
|
'
|
||||||
Me.CH_GET_TAGGED.AutoSize = True
|
Me.CH_GET_TAGGED.AutoSize = True
|
||||||
Me.CH_GET_TAGGED.Dock = System.Windows.Forms.DockStyle.Fill
|
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.Name = "CH_GET_TAGGED"
|
||||||
Me.CH_GET_TAGGED.Size = New System.Drawing.Size(252, 19)
|
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.Text = "Get tagged data"
|
||||||
Me.CH_GET_TAGGED.UseVisualStyleBackColor = True
|
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
|
'OptionsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
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.Controls.Add(CONTAINER_MAIN)
|
||||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32
|
Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MaximizeBox = False
|
Me.MaximizeBox = False
|
||||||
Me.MaximumSize = New System.Drawing.Size(276, 117)
|
Me.MaximumSize = New System.Drawing.Size(276, 143)
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(276, 117)
|
Me.MinimumSize = New System.Drawing.Size(276, 143)
|
||||||
Me.Name = "OptionsForm"
|
Me.Name = "OptionsForm"
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
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_STORIES As CheckBox
|
||||||
Private WithEvents CH_GET_TAGGED As CheckBox
|
Private WithEvents CH_GET_TAGGED As CheckBox
|
||||||
|
Private WithEvents CH_GET_TIMELINE As CheckBox
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -21,6 +21,7 @@ Namespace API.Instagram
|
|||||||
.MyViewInitialize(True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
|
CH_GET_TIMELINE.Checked = .GetTimeline
|
||||||
CH_GET_STORIES.Checked = .GetStories
|
CH_GET_STORIES.Checked = .GetStories
|
||||||
CH_GET_TAGGED.Checked = .GetTagged
|
CH_GET_TAGGED.Checked = .GetTagged
|
||||||
End With
|
End With
|
||||||
@@ -29,6 +30,7 @@ Namespace API.Instagram
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
|
.GetTimeline = CH_GET_TIMELINE.Checked
|
||||||
.GetStories = CH_GET_STORIES.Checked
|
.GetStories = CH_GET_STORIES.Checked
|
||||||
.GetTagged = CH_GET_TAGGED.Checked
|
.GetTagged = CH_GET_TAGGED.Checked
|
||||||
End With
|
End With
|
||||||
|
|||||||
@@ -111,33 +111,37 @@ Namespace API.Instagram
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download properties"
|
#Region "Download properties"
|
||||||
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(8)>
|
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(20)>
|
||||||
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False, LeftOffset:=120), PXML("RequestsWaitTimerTaskCount"), ControlNumber(9)>
|
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False, LeftOffset:=120), PXML("RequestsWaitTimerTaskCount"), ControlNumber(21)>
|
||||||
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Posts limit timer", AllowNull:=False), PXML("SleepTimerOnPostsLimit"), ControlNumber(10)>
|
<PropertyOption(ControlText:="Posts limit timer", AllowNull:=False), PXML("SleepTimerOnPostsLimit"), ControlNumber(22)>
|
||||||
Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue
|
Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue
|
||||||
<Provider(NameOf(SleepTimerOnPostsLimit), FieldsChecker:=True)>
|
<Provider(NameOf(SleepTimerOnPostsLimit), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider
|
Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Get stories"), PXML, ControlNumber(11)>
|
<PropertyOption(ControlText:="Get timeline", ControlToolTip:="Default value for new users"), PXML, ControlNumber(23)>
|
||||||
|
Friend ReadOnly Property GetTimeline As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Get stories", ControlToolTip:="Default value for new users"), PXML, ControlNumber(24)>
|
||||||
Friend ReadOnly Property GetStories As PropertyValue
|
Friend ReadOnly Property GetStories As PropertyValue
|
||||||
<PropertyOption(ControlText:="Get tagged photos"), PXML, ControlNumber(12)>
|
<PropertyOption(ControlText:="Get tagged photos", ControlToolTip:="Default value for new users"), PXML, ControlNumber(25)>
|
||||||
Friend ReadOnly Property GetTagged As PropertyValue
|
Friend ReadOnly Property GetTagged As PropertyValue
|
||||||
<PropertyOption(ControlText:="Tagged notify limit",
|
<PropertyOption(ControlText:="Tagged notify limit",
|
||||||
ControlToolTip:="If the number of tagged posts exceeds this number you will be notified." & vbCr &
|
ControlToolTip:="If the number of tagged posts exceeds this number you will be notified." & vbCr &
|
||||||
"-1 to disable"), PXML, ControlNumber(13)>
|
"-1 to disable"), PXML, ControlNumber(26)>
|
||||||
Friend ReadOnly Property TaggedNotifyLimit As PropertyValue
|
Friend ReadOnly Property TaggedNotifyLimit As PropertyValue
|
||||||
<Provider(NameOf(TaggedNotifyLimit), FieldsChecker:=True)>
|
<Provider(NameOf(TaggedNotifyLimit), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider
|
Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download ready"
|
#Region "Download ready"
|
||||||
<PropertyOption(ControlText:="Download timeline", ControlToolTip:="Download timeline, stories and saved posts"), PXML, ControlNumber(6)>
|
<PropertyOption(ControlText:="Download timeline", ControlToolTip:="Download timeline"), PXML, ControlNumber(10)>
|
||||||
Friend ReadOnly Property DownloadTimeline As PropertyValue
|
Friend ReadOnly Property DownloadTimeline As PropertyValue
|
||||||
<PropertyOption(ControlText:="Download tagged", ControlToolTip:="Download tagged posts"), PXML, ControlNumber(7)>
|
<PropertyOption(ControlText:="Download stories", ControlToolTip:="Download stories"), PXML, ControlNumber(11)>
|
||||||
|
Friend ReadOnly Property DownloadStories As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Download tagged", ControlToolTip:="Download tagged posts"), PXML, ControlNumber(12)>
|
||||||
Friend ReadOnly Property DownloadTagged As PropertyValue
|
Friend ReadOnly Property DownloadTagged As PropertyValue
|
||||||
#End Region
|
#End Region
|
||||||
#Region "429 bypass"
|
#Region "429 bypass"
|
||||||
@@ -207,10 +211,6 @@ Namespace API.Instagram
|
|||||||
.CookiesExtractMode = Responser.CookiesExtractModes.Response
|
.CookiesExtractMode = Responser.CookiesExtractModes.Response
|
||||||
.CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll
|
.CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll
|
||||||
.CookiesExtractedAutoSave = False
|
.CookiesExtractedAutoSave = False
|
||||||
If Not .Cookies Is Nothing Then
|
|
||||||
.Cookies.ChangedAllowInternalDrop = False
|
|
||||||
.Cookies.Changed = False
|
|
||||||
End If
|
|
||||||
End With
|
End With
|
||||||
|
|
||||||
Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString}
|
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))
|
IG_WWW_CLAIM = New PropertyValue(www_claim, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v))
|
||||||
|
|
||||||
DownloadTimeline = New PropertyValue(True)
|
DownloadTimeline = New PropertyValue(True)
|
||||||
|
DownloadStories = New PropertyValue(True)
|
||||||
DownloadTagged = New PropertyValue(False)
|
DownloadTagged = New PropertyValue(False)
|
||||||
|
|
||||||
RequestsWaitTimer = New PropertyValue(1000)
|
RequestsWaitTimer = New PropertyValue(1000)
|
||||||
@@ -230,6 +231,7 @@ Namespace API.Instagram
|
|||||||
SleepTimerOnPostsLimit = New PropertyValue(60000)
|
SleepTimerOnPostsLimit = New PropertyValue(60000)
|
||||||
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
||||||
|
|
||||||
|
GetTimeline = New PropertyValue(True)
|
||||||
GetStories = New PropertyValue(False)
|
GetStories = New PropertyValue(False)
|
||||||
GetTagged = New PropertyValue(False)
|
GetTagged = New PropertyValue(False)
|
||||||
TaggedNotifyLimit = New PropertyValue(200)
|
TaggedNotifyLimit = New PropertyValue(200)
|
||||||
@@ -246,48 +248,6 @@ Namespace API.Instagram
|
|||||||
UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1)
|
UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1)
|
||||||
ImageVideoContains = "instagram.com"
|
ImageVideoContains = "instagram.com"
|
||||||
End Sub
|
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
|
#End Region
|
||||||
#Region "PropertiesDataChecker"
|
#Region "PropertiesDataChecker"
|
||||||
<PropertiesDataChecker({NameOf(TaggedNotifyLimit)})>
|
<PropertiesDataChecker({NameOf(TaggedNotifyLimit)})>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ Namespace API.Instagram
|
|||||||
#Region "XML Names"
|
#Region "XML Names"
|
||||||
Private Const Name_LastCursor As String = "LastCursor"
|
Private Const Name_LastCursor As String = "LastCursor"
|
||||||
Private Const Name_FirstLoadingDone As String = "FirstLoadingDone"
|
Private Const Name_FirstLoadingDone As String = "FirstLoadingDone"
|
||||||
|
Private Const Name_GetTimeline As String = "GetTimeline"
|
||||||
Private Const Name_GetStories As String = "GetStories"
|
Private Const Name_GetStories As String = "GetStories"
|
||||||
Private Const Name_GetTagged As String = "GetTaggedData"
|
Private Const Name_GetTagged As String = "GetTaggedData"
|
||||||
Private Const Name_TaggedChecked As String = "TaggedChecked"
|
Private Const Name_TaggedChecked As String = "TaggedChecked"
|
||||||
@@ -70,16 +71,18 @@ Namespace API.Instagram
|
|||||||
Private ReadOnly PostsToReparse As List(Of PostKV)
|
Private ReadOnly PostsToReparse As List(Of PostKV)
|
||||||
Private LastCursor As String = String.Empty
|
Private LastCursor As String = String.Empty
|
||||||
Private FirstLoadingDone As Boolean = False
|
Private FirstLoadingDone As Boolean = False
|
||||||
|
Friend Property GetTimeline As Boolean = True
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTaggedData As Boolean
|
Friend Property GetTaggedData As Boolean
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Exchange options"
|
#Region "Exchange options"
|
||||||
Friend Overrides Function ExchangeOptionsGet() As Object
|
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
|
End Function
|
||||||
Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object)
|
Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object)
|
||||||
If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then
|
If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then
|
||||||
With DirectCast(Obj, EditorExchangeOptions)
|
With DirectCast(Obj, EditorExchangeOptions)
|
||||||
|
GetTimeline = .GetTimeline
|
||||||
GetStories = .GetStories
|
GetStories = .GetStories
|
||||||
GetTaggedData = .GetTagged
|
GetTaggedData = .GetTagged
|
||||||
End With
|
End With
|
||||||
@@ -197,21 +200,22 @@ Namespace API.Instagram
|
|||||||
AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived
|
AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
HasError = False
|
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)
|
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
||||||
DownloadData(LastCursor, s, Token)
|
DownloadData(LastCursor, s, Token)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If Not HasError Then FirstLoadingDone = True
|
If Not HasError Then FirstLoadingDone = True
|
||||||
End If
|
End If
|
||||||
If CBool(MySiteSettings.DownloadTimeline.Value) And Not HasError Then
|
If dt And Not HasError Then
|
||||||
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
||||||
DownloadData(String.Empty, s, Token)
|
DownloadData(String.Empty, s, Token)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If Not HasError Then FirstLoadingDone = True
|
If Not HasError Then FirstLoadingDone = True
|
||||||
End If
|
End If
|
||||||
If FirstLoadingDone Then LastCursor = String.Empty
|
If FirstLoadingDone Then LastCursor = String.Empty
|
||||||
If MySiteSettings.BaseAuthExists() Then
|
If Not IsSavedPosts AndAlso MySiteSettings.BaseAuthExists() Then
|
||||||
If CBool(MySiteSettings.DownloadTimeline.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token)
|
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)
|
If CBool(MySiteSettings.DownloadTagged.Value) And ACheck(MySiteSettings.HashTagged.Value) And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token)
|
||||||
End If
|
End If
|
||||||
If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify
|
If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify
|
||||||
|
|||||||
@@ -104,10 +104,13 @@ Namespace API.XVIDEOS
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "User: get, check"
|
#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
|
Dim __user$ = User.Name.Split("_").FirstOrDefault
|
||||||
__user &= $"/{User.Name.Replace($"{__user}_", String.Empty)}"
|
__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
|
End Function
|
||||||
Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)"
|
Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)"
|
||||||
Private Const URD As String = ".*?{0}{1}"
|
Private Const URD As String = ".*?{0}{1}"
|
||||||
|
|||||||
@@ -45,16 +45,7 @@ Namespace API.XVIDEOS
|
|||||||
UseInternalM3U8Function = True
|
UseInternalM3U8Function = True
|
||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
If Not Settings.UseM3U8 Then
|
If Not Settings.UseM3U8 Then MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" : Exit Sub
|
||||||
'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 IsSavedPosts Then
|
If IsSavedPosts Then
|
||||||
If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null")
|
If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null")
|
||||||
DownloadSavedVideos(Token)
|
DownloadSavedVideos(Token)
|
||||||
@@ -65,18 +56,29 @@ Namespace API.XVIDEOS
|
|||||||
Private Sub DownloadUserVideo(ByVal Token As CancellationToken)
|
Private Sub DownloadUserVideo(ByVal Token As CancellationToken)
|
||||||
Dim URL$ = String.Empty
|
Dim URL$ = String.Empty
|
||||||
Try
|
Try
|
||||||
Dim NextPage% = 0
|
Dim NextPage%, d%
|
||||||
Dim r$
|
Dim limit% = If(DownloadTopCount, -1)
|
||||||
|
Dim r$, n$
|
||||||
Dim j As EContainer = Nothing
|
Dim j As EContainer = Nothing
|
||||||
Dim jj As EContainer
|
Dim jj As EContainer
|
||||||
Dim user$ = MySettings.GetUserUrl(Me, False)
|
Dim user$ = MySettings.GetUserUrlPart(Me)
|
||||||
Dim p As UserMedia
|
Dim p As UserMedia
|
||||||
Dim EnvirSet As Boolean = False
|
Dim EnvirSet As Boolean = False
|
||||||
|
|
||||||
|
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
|
Do
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
|
If i = 0 Then
|
||||||
URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}"
|
URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}"
|
||||||
r = Responser.GetResponse(URL)
|
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 r.IsEmptyString Then
|
||||||
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
||||||
j = JsonDocument.Parse(r).XmlIfNothing
|
j = JsonDocument.Parse(r).XmlIfNothing
|
||||||
@@ -88,12 +90,14 @@ Namespace API.XVIDEOS
|
|||||||
For Each jj In .Self
|
For Each jj In .Self
|
||||||
p = New UserMedia With {
|
p = New UserMedia With {
|
||||||
.Post = jj.Value("id"),
|
.Post = jj.Value("id"),
|
||||||
.URL = $"https://www.xvideos.com/{jj.Value("u").StringTrimStart("/")}"
|
.URL = $"https://www.xvideos.com/{jj.Value(n).StringTrimStart("/")}"
|
||||||
}
|
}
|
||||||
If Not p.Post.ID.IsEmptyString And Not jj.Value("u").IsEmptyString Then
|
If Not p.Post.ID.IsEmptyString And Not jj.Value(n).IsEmptyString Then
|
||||||
If Not _TempPostsList.Contains(p.Post.ID) Then
|
If Not _TempPostsList.Contains(p.Post.ID) Then
|
||||||
_TempPostsList.Add(p.Post.ID)
|
_TempPostsList.Add(p.Post.ID)
|
||||||
_TempMediaList.Add(p)
|
_TempMediaList.Add(p)
|
||||||
|
d += 1
|
||||||
|
If limit > 0 And d = limit Then Exit Do
|
||||||
Else
|
Else
|
||||||
Exit Do
|
Exit Do
|
||||||
End If
|
End If
|
||||||
@@ -108,6 +112,7 @@ Namespace API.XVIDEOS
|
|||||||
If Not j Is Nothing Then j.Dispose()
|
If Not j Is Nothing Then j.Dispose()
|
||||||
Exit Do
|
Exit Do
|
||||||
Loop While NextPage < 100
|
Loop While NextPage < 100
|
||||||
|
Next
|
||||||
|
|
||||||
If Not j Is Nothing Then j.Dispose()
|
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)
|
If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
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)
|
Private Sub DownloadSavedVideos(ByVal Token As CancellationToken)
|
||||||
Dim URL$ = MySettings.SavedVideosPlaylist.Value
|
Dim URL$ = MySettings.SavedVideosPlaylist.Value
|
||||||
Try
|
Try
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2022.12.26.0")>
|
<Assembly: AssemblyVersion("2022.12.27.0")>
|
||||||
<Assembly: AssemblyFileVersion("2022.12.26.0")>
|
<Assembly: AssemblyFileVersion("2022.12.27.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -23,13 +23,10 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword"
|
Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword"
|
||||||
Friend ReadOnly Design As XmlFile
|
Friend ReadOnly Design As XmlFile
|
||||||
Private ReadOnly MyXML As XmlFile
|
Private ReadOnly MyXML As XmlFile
|
||||||
Private ReadOnly OS64 As Boolean
|
|
||||||
Private ReadOnly FfmpegExists As Boolean
|
Private ReadOnly FfmpegExists As Boolean
|
||||||
Friend ReadOnly FfmpegFile As SFile
|
Friend ReadOnly FfmpegFile As SFile
|
||||||
Friend ReadOnly Property UseM3U8 As Boolean
|
Friend ReadOnly Property UseM3U8 As Boolean
|
||||||
Get
|
Get
|
||||||
'TODELETE: SETTINGS m3u8 delete after debug ffmpeg x86
|
|
||||||
'Return OS64 And FfmpegExists
|
|
||||||
Return FfmpegExists
|
Return FfmpegExists
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
@@ -69,7 +66,6 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
RemoveUnusedPlugins()
|
RemoveUnusedPlugins()
|
||||||
OS64 = Environment.Is64BitOperatingSystem
|
|
||||||
FfmpegFile = "ffmpeg.exe"
|
FfmpegFile = "ffmpeg.exe"
|
||||||
FfmpegExists = FfmpegFile.Exists
|
FfmpegExists = FfmpegFile.Exists
|
||||||
|
|
||||||
@@ -83,7 +79,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
LastCollections = New List(Of String)
|
LastCollections = New List(Of String)
|
||||||
|
|
||||||
FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML)
|
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",
|
If FFMPEGNotification.Value AndAlso MsgBoxE(New MMessage("[ffmpeg.exe] is missing", "ffmpeg.exe",
|
||||||
{"OK", New MsgBoxButton("Disable notification") With {
|
{"OK", New MsgBoxButton("Disable notification") With {
|
||||||
.IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With {
|
.IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With {
|
||||||
|
|||||||
Reference in New Issue
Block a user