pythonapiimdb

Have an image link from iMDB api, how can I change it's size pyton


I am trying to work with IMDb API. My code thus far is

import http.client
import json
import requests

conn = http.client.HTTPSConnection("imdb-api.com", 443)
payload = ''
headers = {'User-agent': 'Chrome/95.0'}
conn.request("GET", "https://imdb-api.com/en/API/MostPopularMovies/<API_Key>",headers=headers)
res = conn.getresponse()
data = res.read()
convertedDict = json.loads(data.decode("utf-8"))
imagepath = r'venv/files/image.jpeg'
req = requests.get(convertedDict['items'][0]['image'], headers=headers)

with open(imagepath, 'wb') as file:
   file.write(req.content)

This allows me to download the image of the first popular movie, however, the image size is really small. This is the link that I am downloading. I know that if I get rid of everything after @ the image will become a lot larger. Is there a way to edit the link such that I can drop everything after @ and even edit the numbers after UX with code? Everything I try to do with string or URL operations give's me an error

https://m.media-amazon.com/images/M/MV5BZWMyYzFjYTYtNTRjYi00OGExLWE2YzgtOGRmYjAxZTU3NzBiXkEyXkFqcGdeQXVyMzQ0MzA0NTM@._V1_UX128_CR0,3,128,176_AL_.jpg

Thank you in advance


Solution

  • Explanation

    (code example below)

    Here's how to get a bigger image of the size you want. Given this URL,

     https://m.media-amazon.com/images/M/MV5BZWMyYzFjYTYtNTRjYi00OGExLWE2YzgtOGRmYjAxZTU3NzBiXkEyXkFqcGdeQXVyMzQ0MzA0NTM@._V1_UX128_CR0,3,128,176_AL_.jpg
    

    There's a substring of it:

     UX128_CR0,3,128,176
    

    This has three important parts:

    1. The first 128 resizes the image by width, keeping ratio
    2. The second 128 controls the container width that the image appears in
    3. 176 controls the container height that the image appears in.

    So, we can view the structure like this:

     UX<image_width>_CR0,3,<container_width>,<container_height>
    

    As an example, to double the image size:

     UX256_CR0,3,256,352_AL_.jpg
    

    (Click here to see: https://m.media-amazon.com/images/M/MV5BZWMyYzFjYTYtNTRjYi00OGExLWE2YzgtOGRmYjAxZTU3NzBiXkEyXkFqcGdeQXVyMzQ0MzA0NTM@.V1_UX256_CR0,3,256,352_AL.jpg

    Update: Example of how you might do it in Python.

    import re
    
    resize_factor = 2 # Image size multiple
    url = "https://m.media-amazon.com/images/M/MV5BZWMyYzFjYTYtNTRjYi00OGExLWE2YzgtOGRmYjAxZTU3NzBiXkEyXkFqcGdeQXVyMzQ0MzA0NTM@._V1_UX128_CR0,3,128,176_AL_.jpg"
    
    #
    # resize_factor : Image size multiplier (e.g., resize_factor = 2 doubles the image size, positive integer only)
    # url : full URL of the image
    # return : string of the new URL
    #
    
    def getURL(resize_factor, url):
    
        # Regex for pattern matching relevant parts of the URL
        p = re.compile(".*UX([0-9]*)_CR0,([0-9]*),([0-9]*),([0-9]*).*") 
        match = p.search(url)
        
        if match:
            # Get the image dimensions from the URL
            img_width = str(int(match.group(1)) * resize_factor)
            container_width = str(int(match.group(3)) * resize_factor)
            container_height = str(int (match.group(4)) * resize_factor)
        
            # Change the image dimensions
            result = re.sub(r"(.*UX)([0-9]*)(.*)", r"\g<1>"+ img_width +"\g<3>", url)
            result = re.sub(r"(.*UX[0-9]*_CR0,[0-9]*,)([0-9]*)(.*)", r"\g<1>"+ img_width +"\g<3>", result)
            result = re.sub(r"(.*UX[0-9]*_CR0,[0-9]*,[0-9]*,)([0-9]*)(.*)", r"\g<1>"+ container_height +"\g<3>", result)
        
            return result
    #
    # Test
    #
    
    print (getURL(resize_factor,url))
    
    
    
     
    

    Edit: Typo