mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-15 00:02:17 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a301ebc5e |
11
Changelog.md
11
Changelog.md
@@ -1,3 +1,14 @@
|
|||||||
|
# 3.0.0.6
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- ```GoTo Start``` channels button
|
||||||
|
- ```GoTo End``` channels button
|
||||||
|
- Fixed
|
||||||
|
- In some cases, saved Reddit posts didn't fully download
|
||||||
|
- Incorrect Reddit accessibility check algorithm
|
||||||
|
- Incorrect behavior of the main progress bar when downloading saved posts
|
||||||
|
- (Issue #25) Date and Time not added for Stories and Tagged Photos
|
||||||
|
|
||||||
# 3.0.0.5
|
# 3.0.0.5
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
|
|||||||
@@ -33,25 +33,32 @@ Namespace API.Base
|
|||||||
Friend Shared Function GetData(ByVal Site As String) As List(Of Data)
|
Friend Shared Function GetData(ByVal Site As String) As List(Of Data)
|
||||||
Try
|
Try
|
||||||
Dim l As List(Of Data) = Nothing
|
Dim l As List(Of Data) = Nothing
|
||||||
|
Dim l2 As List(Of Data) = Nothing
|
||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
Dim r$ = w.DownloadString($"https://downdetector.co.uk/status/{Site}/")
|
Dim r$ = w.DownloadString($"https://downdetector.co.uk/status/{Site}/")
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
l = FNF.RegexFields(Of Data)(r, {Params}, {1, 2})
|
l = FNF.RegexFields(Of Data)(r, {Params}, {1, 2})
|
||||||
If l.ListExists(2) Then
|
If l.ListExists(2) Then
|
||||||
Dim lDate As Date = l(0).Date
|
|
||||||
Dim i%
|
|
||||||
Dim indx% = -1
|
|
||||||
For i = 1 To l.Count - 1
|
|
||||||
If l(i).Date < lDate Then indx = i : Exit For Else lDate = l(i).Date
|
|
||||||
Next
|
|
||||||
If indx >= 0 Then
|
|
||||||
For i = indx To 0 Step -1 : l.RemoveAt(i) : Next
|
|
||||||
End If
|
|
||||||
l.Sort()
|
l.Sort()
|
||||||
|
l2 = New List(Of Data)
|
||||||
|
Dim d As Data
|
||||||
|
Dim eDates As New List(Of Date)
|
||||||
|
Dim MaxValue As Func(Of Date, Integer) = Function(dd) (From ddd In l Where ddd.Date = dd Select ddd.Value).DefaultIfEmpty(0).Max
|
||||||
|
For i% = 0 To l.Count - 1
|
||||||
|
If Not eDates.Contains(l(i).Date) Then
|
||||||
|
d = l(i)
|
||||||
|
d.Value = MaxValue(d.Date)
|
||||||
|
l2.Add(d)
|
||||||
|
eDates.Add(d.Date)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
eDates.Clear()
|
||||||
|
l.Clear()
|
||||||
|
l2.Sort()
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
Return l
|
Return l2
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, $"[DownDetector.GetData({Site})]")
|
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, $"[DownDetector.GetData({Site})]")
|
||||||
End Try
|
End Try
|
||||||
|
|||||||
@@ -390,11 +390,30 @@ Namespace API.Instagram
|
|||||||
CreateMedia(node)
|
CreateMedia(node)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ObtainMedia2(ByVal n As EContainer, ByVal PostID As String, Optional ByVal SpecialFolder As String = Nothing)
|
Private Sub ObtainMedia2(ByVal n As EContainer, ByVal PostID As String, Optional ByVal SpecialFolder As String = Nothing,
|
||||||
|
Optional ByVal DateObj As String = Nothing)
|
||||||
Try
|
Try
|
||||||
Dim img As Predicate(Of EContainer) = Function(_img) Not _img.Name.IsEmptyString AndAlso _img.Name.StartsWith("image_versions") AndAlso _img.Count > 0
|
Dim img As Predicate(Of EContainer) = Function(_img) Not _img.Name.IsEmptyString AndAlso _img.Name.StartsWith("image_versions") AndAlso _img.Count > 0
|
||||||
Dim vid As Predicate(Of EContainer) = Function(_vid) Not _vid.Name.IsEmptyString AndAlso _vid.Name.StartsWith("video_versions") AndAlso _vid.Count > 0
|
Dim vid As Predicate(Of EContainer) = Function(_vid) Not _vid.Name.IsEmptyString AndAlso _vid.Name.StartsWith("video_versions") AndAlso _vid.Count > 0
|
||||||
Dim ss As Func(Of EContainer, Sizes) = Function(_ss) New Sizes(_ss.Value("width"), _ss.Value("url"))
|
Dim ss As Func(Of EContainer, Sizes) = Function(_ss) New Sizes(_ss.Value("width"), _ss.Value("url"))
|
||||||
|
Dim mDate As Func(Of EContainer, String) = Function(ByVal elem As EContainer) As String
|
||||||
|
If elem.Contains("taken_at") Then
|
||||||
|
Return elem.Value("taken_at")
|
||||||
|
ElseIf elem.Contains("imported_taken_at") Then
|
||||||
|
Return elem.Value("imported_taken_at")
|
||||||
|
Else
|
||||||
|
Dim ev$ = elem.Value("device_timestamp")
|
||||||
|
If Not ev.IsEmptyString Then
|
||||||
|
If ev.Length > 10 Then
|
||||||
|
Return elem.Value("device_timestamp").Substring(0, 10)
|
||||||
|
Else
|
||||||
|
Return ev
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
If n.Count > 0 Then
|
If n.Count > 0 Then
|
||||||
Dim l As New List(Of Sizes)
|
Dim l As New List(Of Sizes)
|
||||||
Dim d As EContainer
|
Dim d As EContainer
|
||||||
@@ -408,6 +427,7 @@ Namespace API.Instagram
|
|||||||
Case 1
|
Case 1
|
||||||
If n.Contains(img) Then
|
If n.Contains(img) Then
|
||||||
t = n.Value("media_type").FromXML(Of Integer)(-1)
|
t = n.Value("media_type").FromXML(Of Integer)(-1)
|
||||||
|
DateObj = mDate(n)
|
||||||
If t >= 0 Then
|
If t >= 0 Then
|
||||||
With n.ItemF({img, "candidates"}).XmlIfNothing
|
With n.ItemF({img, "candidates"}).XmlIfNothing
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
@@ -415,7 +435,7 @@ Namespace API.Instagram
|
|||||||
l.ListAddList(.Select(ss), LNC)
|
l.ListAddList(.Select(ss), LNC)
|
||||||
If l.Count > 0 Then
|
If l.Count > 0 Then
|
||||||
l.Sort()
|
l.Sort()
|
||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, l.First.Data, PostID, Nothing, SpecialFolder), LNC)
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, l.First.Data, PostID, DateObj, SpecialFolder), LNC)
|
||||||
l.Clear()
|
l.Clear()
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -424,22 +444,24 @@ Namespace API.Instagram
|
|||||||
End If
|
End If
|
||||||
Case 2
|
Case 2
|
||||||
If n.Contains(vid) Then
|
If n.Contains(vid) Then
|
||||||
|
DateObj = mDate(n)
|
||||||
With n.ItemF({vid}).XmlIfNothing
|
With n.ItemF({vid}).XmlIfNothing
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
l.Clear()
|
l.Clear()
|
||||||
l.ListAddList(.Select(ss), LNC)
|
l.ListAddList(.Select(ss), LNC)
|
||||||
If l.Count > 0 Then
|
If l.Count > 0 Then
|
||||||
l.Sort()
|
l.Sort()
|
||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.Video, l.First.Data, PostID, Nothing, SpecialFolder), LNC)
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Video, l.First.Data, PostID, DateObj, SpecialFolder), LNC)
|
||||||
l.Clear()
|
l.Clear()
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
Case 8
|
Case 8
|
||||||
|
DateObj = mDate(n)
|
||||||
With n("carousel_media").XmlIfNothing
|
With n("carousel_media").XmlIfNothing
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
For Each d In .Self : ObtainMedia2(d, PostID, SpecialFolder) : Next
|
For Each d In .Self : ObtainMedia2(d, PostID, SpecialFolder, DateObj) : Next
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
End Select
|
End Select
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ Namespace API.Reddit
|
|||||||
Return Posts(Index)
|
Return Posts(Index)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Private ReadOnly Property Range As RangeSwitcher(Of UserPost)
|
|
||||||
Friend Property ViewMode As View = View.New Implements IRedditView.ViewMode
|
Friend Property ViewMode As View = View.New Implements IRedditView.ViewMode
|
||||||
Friend Property ViewPeriod As Period = Period.All Implements IRedditView.ViewPeriod
|
Friend Property ViewPeriod As Period = Period.All Implements IRedditView.ViewPeriod
|
||||||
Friend Sub SetView(ByVal Options As IRedditView) Implements IRedditView.SetView
|
Friend Sub SetView(ByVal Options As IRedditView) Implements IRedditView.SetView
|
||||||
@@ -219,7 +218,6 @@ Namespace API.Reddit
|
|||||||
Posts = New List(Of UserPost)
|
Posts = New List(Of UserPost)
|
||||||
PostsLatest = New List(Of UserPost)
|
PostsLatest = New List(Of UserPost)
|
||||||
PostsNames = New List(Of String)
|
PostsNames = New List(Of String)
|
||||||
Range = New RangeSwitcher(Of UserPost)(Me)
|
|
||||||
CountOfAddedUsers = New List(Of Integer)
|
CountOfAddedUsers = New List(Of Integer)
|
||||||
CountOfLoadedPostsPerSession = New List(Of Integer)
|
CountOfLoadedPostsPerSession = New List(Of Integer)
|
||||||
ChannelExistentUserNames = New List(Of String)
|
ChannelExistentUserNames = New List(Of String)
|
||||||
@@ -410,7 +408,6 @@ Namespace API.Reddit
|
|||||||
PostsNames.Clear()
|
PostsNames.Clear()
|
||||||
CountOfAddedUsers.Clear()
|
CountOfAddedUsers.Clear()
|
||||||
CountOfLoadedPostsPerSession.Clear()
|
CountOfLoadedPostsPerSession.Clear()
|
||||||
Range.Dispose()
|
|
||||||
ChannelExistentUserNames.Clear()
|
ChannelExistentUserNames.Clear()
|
||||||
CachePath.Delete(SFO.Path, SFODelete.None, EDP.SendInLog)
|
CachePath.Delete(SFO.Path, SFODelete.None, EDP.SendInLog)
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -53,7 +53,10 @@ Namespace API.Reddit
|
|||||||
Case Download.Channel : Return New UserData With {.SaveToCache = False, .SkipExistsUsers = False, .AutoGetLimits = True}
|
Case Download.Channel : Return New UserData With {.SaveToCache = False, .SkipExistsUsers = False, .AutoGetLimits = True}
|
||||||
Case Download.SavedPosts
|
Case Download.SavedPosts
|
||||||
Dim u As New UserData With {.IsSavedPosts = True}
|
Dim u As New UserData With {.IsSavedPosts = True}
|
||||||
DirectCast(u, UserDataBase).User = New UserInfo With {.Name = CStr(AConvert(Of String)(SavedPostsUserName.Value, String.Empty))}
|
DirectCast(u, UserDataBase).User = New UserInfo With {
|
||||||
|
.Name = CStr(AConvert(Of String)(SavedPostsUserName.Value, String.Empty)),
|
||||||
|
.IsChannel = True
|
||||||
|
}
|
||||||
Return u
|
Return u
|
||||||
End Select
|
End Select
|
||||||
Return Nothing
|
Return Nothing
|
||||||
|
|||||||
@@ -340,7 +340,7 @@ Namespace API.Reddit
|
|||||||
If s.Contains("created") Then PostDate = s("created").Value Else PostDate = String.Empty
|
If s.Contains("created") Then PostDate = s("created").Value Else PostDate = String.Empty
|
||||||
_UserID = s.Value("author")
|
_UserID = s.Value("author")
|
||||||
|
|
||||||
If SkipExistsUsers AndAlso _ExistsUsersNames.Count > 0 AndAlso
|
If Not IsSavedPosts AndAlso SkipExistsUsers AndAlso _ExistsUsersNames.Count > 0 AndAlso
|
||||||
Not _UserID.IsEmptyString AndAlso _ExistsUsersNames.Contains(_UserID) Then
|
Not _UserID.IsEmptyString AndAlso _ExistsUsersNames.Contains(_UserID) Then
|
||||||
If Not IsSavedPosts AndAlso Not ChannelInfo Is Nothing Then _
|
If Not IsSavedPosts AndAlso Not ChannelInfo Is Nothing Then _
|
||||||
ChannelInfo.ChannelExistentUserNames.ListAddValue(_UserID, LNC)
|
ChannelInfo.ChannelExistentUserNames.ListAddValue(_UserID, LNC)
|
||||||
|
|||||||
@@ -201,11 +201,12 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
MyRange = New RangeSwitcher(Of UserPost) With {.Selector = SelectorExpression}
|
MyRange = New RangeSwitcher(Of UserPost) With {.Selector = SelectorExpression}
|
||||||
With MyRange
|
With MyRange
|
||||||
.Limit = ImagesInRow * ImagesRows
|
.Limit = ImagesInRow * ImagesRows
|
||||||
.InsertButtons(ToolbarTOP, {RButton.Previous, RButton.Next}, 5)
|
.InsertButtons(ToolbarTOP,, 5)
|
||||||
.SetButtonKey(RButton.Previous, Keys.F2)
|
.SetButtonKey(RButton.Previous, Keys.F2)
|
||||||
.SetButtonKey(RButton.Next, Keys.F3)
|
.SetButtonKey(RButton.Next, Keys.F3)
|
||||||
.BindForm(Me)
|
.BindForm(Me)
|
||||||
.LabelNumbersProvider = CProvider
|
.LabelNumbersProvider = CProvider
|
||||||
|
.LabelShowAbsolutIndexes = False
|
||||||
.UpdateControls()
|
.UpdateControls()
|
||||||
End With
|
End With
|
||||||
AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged
|
AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged
|
||||||
@@ -215,6 +216,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
MyDefs.MyViewInitialize(Me, Settings.Design)
|
MyDefs.MyViewInitialize(Me, Settings.Design)
|
||||||
RefillChannels(Settings.LatestSelectedChannel.Value)
|
RefillChannels(Settings.LatestSelectedChannel.Value)
|
||||||
ChangeComboIndex(0)
|
ChangeComboIndex(0)
|
||||||
|
MyRange.LabelText = String.Empty
|
||||||
CMB_CHANNELS_ActionOnCheckedChange(CMB_CHANNELS.Checked)
|
CMB_CHANNELS_ActionOnCheckedChange(CMB_CHANNELS.Checked)
|
||||||
With LIST_POSTS
|
With LIST_POSTS
|
||||||
Dim s As Size = GetImageSize()
|
Dim s As Size = GetImageSize()
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ Namespace DownloadObjects
|
|||||||
RaiseEvent OnTotalCountChange()
|
RaiseEvent OnTotalCountChange()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub JobProgress_OnProgressChange(ByVal Source As IMyProgress, ByVal Index As Integer)
|
Private Sub JobProgress_OnProgressChange(ByVal Source As IMyProgress, ByVal Index As Integer)
|
||||||
MainProgress.Perform()
|
If Not Job.Type = Download.SavedPosts Then MainProgress.Perform()
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "IDisposable Support"
|
#Region "IDisposable Support"
|
||||||
|
|||||||
@@ -254,9 +254,7 @@ Namespace DownloadObjects
|
|||||||
Dim SiteChecked As Boolean = False
|
Dim SiteChecked As Boolean = False
|
||||||
Do While _Job.Count > 0
|
Do While _Job.Count > 0
|
||||||
_Job.ThrowIfCancellationRequested()
|
_Job.ThrowIfCancellationRequested()
|
||||||
If Not SiteChecked Then
|
If Not SiteChecked Then _Job.Available() : SiteChecked = True : Continue Do
|
||||||
If Not _Job.Available Then Exit Sub Else SiteChecked = True : Continue Do
|
|
||||||
End If
|
|
||||||
UpdateJobsLabel()
|
UpdateJobsLabel()
|
||||||
DownloadData(_Job, _Job.Token)
|
DownloadData(_Job, _Job.Token)
|
||||||
_Job.ThrowIfCancellationRequested()
|
_Job.ThrowIfCancellationRequested()
|
||||||
|
|||||||
@@ -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("3.0.0.5")>
|
<Assembly: AssemblyVersion("3.0.0.6")>
|
||||||
<Assembly: AssemblyFileVersion("3.0.0.5")>
|
<Assembly: AssemblyFileVersion("3.0.0.6")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
Reference in New Issue
Block a user