Skip to content

Commit bb13216

Browse files
authored
Merge pull request #1113 from AudricV/snd_fix-non-jpg-images
[SoundCloud] Fix extraction of non-JPG images
2 parents 917554a + c98695f commit bb13216

2 files changed

Lines changed: 32 additions & 31 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public final class SoundcloudParsingHelper {
5252
// and researches on images used by the websites
5353
// CHECKSTYLE:ON
5454
/*
55-
SoundCloud avatars and artworks are almost squares
55+
SoundCloud avatars and artworks are almost always squares.
5656
5757
When we get non-square pictures, all these images variants are still squares, except the
5858
original and the crop versions provides images which are respecting aspect ratios.
@@ -62,28 +62,28 @@ public final class SoundcloudParsingHelper {
6262
uploaded with a lower size than these variants: in this case, these variants return an upscaled
6363
version of the original image.
6464
*/
65-
private static final List<ImageSuffix> ALBUMS_AND_ARTWORKS_URL_SUFFIXES_AND_RESOLUTIONS =
66-
List.of(new ImageSuffix("mini.jpg", 16, 16, LOW),
67-
new ImageSuffix("t20x20.jpg", 20, 20, LOW),
68-
new ImageSuffix("small.jpg", 32, 32, LOW),
69-
new ImageSuffix("badge.jpg", 47, 47, LOW),
70-
new ImageSuffix("t50x50.jpg", 50, 50, LOW),
71-
new ImageSuffix("t60x60.jpg", 60, 60, LOW),
65+
private static final List<ImageSuffix> ALBUMS_AND_ARTWORKS_IMAGE_SUFFIXES =
66+
List.of(new ImageSuffix("mini", 16, 16, LOW),
67+
new ImageSuffix("t20x20", 20, 20, LOW),
68+
new ImageSuffix("small", 32, 32, LOW),
69+
new ImageSuffix("badge", 47, 47, LOW),
70+
new ImageSuffix("t50x50", 50, 50, LOW),
71+
new ImageSuffix("t60x60", 60, 60, LOW),
7272
// Seems to work also on avatars, even if it is written to be not the case in
7373
// the old API docs
74-
new ImageSuffix("t67x67.jpg", 67, 67, LOW),
75-
new ImageSuffix("t80x80.jpg", 80, 80, LOW),
76-
new ImageSuffix("large.jpg", 100, 100, LOW),
77-
new ImageSuffix("t120x120.jpg", 120, 120, LOW),
78-
new ImageSuffix("t200x200.jpg", 200, 200, MEDIUM),
79-
new ImageSuffix("t240x240.jpg", 240, 240, MEDIUM),
80-
new ImageSuffix("t250x250.jpg", 250, 250, MEDIUM),
81-
new ImageSuffix("t300x300.jpg", 300, 300, MEDIUM),
82-
new ImageSuffix("t500x500.jpg", 500, 500, MEDIUM));
83-
84-
private static final List<ImageSuffix> VISUALS_URL_SUFFIXES_AND_RESOLUTIONS =
85-
List.of(new ImageSuffix("t1240x260.jpg", 1240, 260, MEDIUM),
86-
new ImageSuffix("t2480x520.jpg", 2480, 520, MEDIUM));
74+
new ImageSuffix("t67x67", 67, 67, LOW),
75+
new ImageSuffix("t80x80", 80, 80, LOW),
76+
new ImageSuffix("large", 100, 100, LOW),
77+
new ImageSuffix("t120x120", 120, 120, LOW),
78+
new ImageSuffix("t200x200", 200, 200, MEDIUM),
79+
new ImageSuffix("t240x240", 240, 240, MEDIUM),
80+
new ImageSuffix("t250x250", 250, 250, MEDIUM),
81+
new ImageSuffix("t300x300", 300, 300, MEDIUM),
82+
new ImageSuffix("t500x500", 500, 500, MEDIUM));
83+
84+
private static final List<ImageSuffix> VISUALS_IMAGE_SUFFIXES =
85+
List.of(new ImageSuffix("t1240x260", 1240, 260, MEDIUM),
86+
new ImageSuffix("t2480x520", 2480, 520, MEDIUM));
8787

8888
private static String clientId;
8989
public static final String SOUNDCLOUD_API_V2_URL = "https://api-v2.soundcloud.com/";
@@ -435,9 +435,9 @@ public static List<Image> getAllImagesFromArtworkOrAvatarUrl(
435435

436436
return getAllImagesFromImageUrlReturned(
437437
// Artwork and avatars are originally returned with the "large" resolution, which
438-
// is 100x100
439-
originalArtworkOrAvatarUrl.replace("large.jpg", ""),
440-
ALBUMS_AND_ARTWORKS_URL_SUFFIXES_AND_RESOLUTIONS);
438+
// is 100px wide
439+
originalArtworkOrAvatarUrl.replace("-large.", "-%s."),
440+
ALBUMS_AND_ARTWORKS_IMAGE_SUFFIXES);
441441
}
442442

443443
@Nonnull
@@ -450,15 +450,16 @@ public static List<Image> getAllImagesFromVisualUrl(
450450
return getAllImagesFromImageUrlReturned(
451451
// Images are originally returned with the "original" resolution, which may be
452452
// huge so don't include it for size purposes
453-
originalVisualUrl.replace("original.jpg", ""),
454-
VISUALS_URL_SUFFIXES_AND_RESOLUTIONS);
453+
originalVisualUrl.replace("-original.", "-%s."),
454+
VISUALS_IMAGE_SUFFIXES);
455455
}
456456

457457
private static List<Image> getAllImagesFromImageUrlReturned(
458-
@Nonnull final String baseImageUrl,
458+
@Nonnull final String baseImageUrlFormat,
459459
@Nonnull final List<ImageSuffix> imageSuffixes) {
460460
return imageSuffixes.stream()
461-
.map(imageSuffix -> new Image(baseImageUrl + imageSuffix.getSuffix(),
461+
.map(imageSuffix -> new Image(
462+
String.format(baseImageUrlFormat, imageSuffix.getSuffix()),
462463
imageSuffix.getHeight(), imageSuffix.getWidth(),
463464
imageSuffix.getResolutionLevel()))
464465
.collect(Collectors.toUnmodifiableList());

extractor/src/main/java/org/schabi/newpipe/extractor/utils/ImageSuffix.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import java.util.Objects;
88

99
/**
10-
* Serializable class representing a suffix (including its format extension, such as {@code .jpg})
11-
* which needs to be added to get an image/thumbnail URL with its corresponding height, width and
12-
* estimated resolution level.
10+
* Serializable class representing a suffix (which may include its format extension, such as
11+
* {@code .jpg}) which needs to be added to get an image/thumbnail URL with its corresponding
12+
* height, width and estimated resolution level.
1313
*
1414
* <p>
1515
* This class is used to construct {@link org.schabi.newpipe.extractor.Image Image}

0 commit comments

Comments
 (0)