Skip to content

Commit 2eabc93

Browse files
committed
feat: retry image download by fixed cdn
1 parent b6aa824 commit 2eabc93

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

app/scripts/utils/tools.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,12 @@ const convertBlogList = async ({
167167
: _.compact(
168168
_.map(pic_infos, (picInfo, picKey) => {
169169
const url = picInfo?.large?.url || undefined
170+
const largest = picInfo?.largest?.url || undefined
170171
if (!url) return undefined
171172
return {
172173
picName: matchImageOrVideoFromUrl(url) || `${picKey}.jpg`,
173174
url,
175+
largest,
174176
}
175177
})
176178
)
@@ -179,9 +181,11 @@ const convertBlogList = async ({
179181
const { type, data } = item || {}
180182
if (type == `pic`) {
181183
const url = data?.large?.url || undefined
184+
const largest = data?.largest?.url || undefined
182185
picShows.push({
183186
picName: matchImageOrVideoFromUrl(url) || `${data?.pic_id}.jpg`,
184187
url,
188+
largest,
185189
})
186190
}
187191
if (type == `video`) {
@@ -208,7 +212,8 @@ const convertBlogList = async ({
208212
weiboCount: _count,
209213
weiboPicCount: _count_pic_count,
210214
})
211-
const picBlob = await fetchToGetImageBlobByXHR({ imageUrl: picShow?.url })
215+
// const picBlob = await fetchToGetImageBlobByXHR({ imageUrl: picShow?.url })
216+
const picBlob = await getImageRetry({ imageUrl: picShow?.url, picName: picShow.picName })
212217
if (picBlob) {
213218
imageFolder?.file(picShow.picName, picBlob)
214219
}
@@ -222,10 +227,12 @@ const convertBlogList = async ({
222227
: _.compact(
223228
_.map(retweeted_status.pic_infos, (picInfo, picKey) => {
224229
const url = picInfo?.large?.url || undefined
230+
const largest = picInfo?.largest?.url || undefined
225231
if (!url) return undefined
226232
return {
227233
picName: matchImageOrVideoFromUrl(url) || `${picKey}.jpg`,
228234
url,
235+
largest,
229236
}
230237
})
231238
)
@@ -234,9 +241,11 @@ const convertBlogList = async ({
234241
const { type, data } = item || {}
235242
if (type == `pic`) {
236243
const url = data?.large?.url || undefined
244+
const largest = data?.largest?.url || undefined
237245
retweeted_status_picShows.push({
238246
picName: matchImageOrVideoFromUrl(url) || `${data?.pic_id}.jpg`,
239247
url,
248+
largest,
240249
})
241250
}
242251
if (type == `video`) {
@@ -256,7 +265,8 @@ const convertBlogList = async ({
256265
weiboCount: _count,
257266
weiboPicCount: _count_pic_count,
258267
})
259-
const picBlob = await fetchToGetImageBlobByXHR({ imageUrl: retweetPicShow?.url })
268+
// const picBlob = await fetchToGetImageBlobByXHR({ imageUrl: retweetPicShow?.url })
269+
const picBlob = await getImageRetry({ imageUrl: retweetPicShow?.url, picName: retweetPicShow.picName })
260270
if (picBlob) {
261271
imageFolder?.file(retweetPicShow.picName, picBlob)
262272
}
@@ -440,3 +450,22 @@ const getFileStringFromExtension = async (): Promise<Blob> => {
440450
export const matchImageOrVideoFromUrl = (url: string) => {
441451
return url?.match(/\/([\da-zA-Z]+\.[a-z0-9]{3,4})(\?|$)/)?.[1] || ''
442452
}
453+
454+
// 新增补偿下载
455+
const getImageRetry = async ({ imageUrl, picName }: { imageUrl: string; picName?: string }) => {
456+
const picBlob = await fetchToGetImageBlobByXHR({ imageUrl: imageUrl })
457+
if (picBlob) {
458+
return picBlob
459+
}
460+
461+
if (picName) {
462+
const randomImageCDN = Math.floor(Math.random() * 3) + 1
463+
const retryUrl = `https://wx${randomImageCDN}.sinaimg.cn/large/${picName}`
464+
const retryPicBlob = await fetchToGetImageBlobByXHR({ imageUrl: retryUrl })
465+
if (retryPicBlob) {
466+
return retryPicBlob
467+
}
468+
}
469+
470+
return null
471+
}

0 commit comments

Comments
 (0)