Skip to content

Commit 824817c

Browse files
fix: add publishedAt time to downloaded file (#10)
1 parent 5434a3e commit 824817c

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

main.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"regexp"
1111
"slices"
1212
"strings"
13+
"time"
1314

1415
"patreon-crawler/patreon"
1516
"patreon-crawler/patreon/api"
@@ -113,49 +114,57 @@ func getFileExtension(mimeType string) (string, error) {
113114
return mimeTypeSplits[1], nil
114115
}
115116

116-
func downloadMedia(media patreon.Media, downloadDir string) error {
117+
func downloadMedia(media patreon.Media, downloadDir string) (string, error) {
117118
extension, err := getFileExtension(media.MimeType)
118119
if err != nil {
119-
return err
120+
return "", err
120121
}
121122
downloadedFilePath := fmt.Sprintf("%s/%s.%s", downloadDir, media.ID, extension)
122123

123124
if _, err := os.Stat(downloadedFilePath); err == nil {
124125
fmt.Printf("\t- skiped %s (already downloaded)\n", media.ID)
125-
return nil
126+
return downloadedFilePath, nil
126127
}
127128

128129
response, err := http.Get(media.DownloadURL)
129130
if err != nil {
130-
return fmt.Errorf("failed to download media: %w", err)
131+
return "", fmt.Errorf("failed to download media: %w", err)
131132
}
132133
defer response.Body.Close()
133134

134135
if response.StatusCode != http.StatusOK {
135-
return fmt.Errorf("failed to download media: %s", response.Status)
136+
return "", fmt.Errorf("failed to download media: %s", response.Status)
136137
}
137138

138139
tempDownloadFilePath := downloadedFilePath + ".tmp"
139140

140141
out, err := os.Create(tempDownloadFilePath)
141142
if err != nil {
142-
return fmt.Errorf("failed to create file: %w", err)
143+
return "", fmt.Errorf("failed to create file: %w", err)
143144
}
144145
defer out.Close()
145146

146147
_, err = io.Copy(out, response.Body)
147148
if err != nil {
148-
return fmt.Errorf("failed to write file: %w", err)
149+
return "", fmt.Errorf("failed to write file: %w", err)
149150
}
150151

151152
out.Close()
152153

153154
err = os.Rename(tempDownloadFilePath, downloadedFilePath)
154155
if err != nil {
155-
return fmt.Errorf("failed to rename file: %w", err)
156+
return "", fmt.Errorf("failed to rename file: %w", err)
156157
}
157158

158159
fmt.Printf("\t- saved %s\n", media.ID)
160+
return downloadedFilePath, nil
161+
}
162+
163+
func adjustFileTime(file string, time time.Time) error {
164+
err := os.Chtimes(file, time, time)
165+
if err != nil {
166+
return fmt.Errorf("failed to adjust file time: %w", err)
167+
}
159168
return nil
160169
}
161170

@@ -170,7 +179,11 @@ func downloadPost(downloadDirectory string, post patreon.Post) error {
170179
}
171180

172181
for _, media := range post.Media {
173-
err := downloadMedia(media, downloadDirectory)
182+
file, err := downloadMedia(media, downloadDirectory)
183+
if err != nil {
184+
return err
185+
}
186+
err = adjustFileTime(file, post.PublishedAt)
174187
if err != nil {
175188
return err
176189
}

patreon/client.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package patreon
22

33
import (
44
"iter"
5+
"time"
56

67
"patreon-crawler/patreon/api"
78
)
@@ -65,10 +66,16 @@ func (c *Crawler) GetPosts(cursor string) ([]Post, string, error) {
6566
media = append(media, m)
6667
}
6768

69+
publishedAt, err := time.Parse(time.RFC3339, responsePost.Attributes.PublishedAt)
70+
if err != nil {
71+
return nil, "", err
72+
}
73+
6874
posts = append(posts, Post{
6975
ID: responsePost.ID,
7076
Title: responsePost.Attributes.Title,
7177
Media: media,
78+
PublishedAt: publishedAt,
7279
CurrentUserCanView: responsePost.Attributes.CurrentUserCanView,
7380
})
7481
}

patreon/posts.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package patreon
22

3+
import "time"
4+
35
type Post struct {
46
ID string
57
Title string
68
Media []Media
9+
PublishedAt time.Time
710
CurrentUserCanView bool
811
}
912

0 commit comments

Comments
 (0)