본문 바로가기
파이썬

픽사베이 무료이미지 사이트 API로 가져오는 방법

by 진심블로그 2024. 3. 12.

안녕하세요. 파이신입니다.

 

오늘은 파이썬을 이용해서 픽사베이에서 무료이미지를 가져오는 방법을 알아봅니다.

 

픽사베이에서 제공하는 API를 이용하는 방법입니다.

 

- 이 글은 파이썬 중급 이상이 읽어보기에 적합합니다

- 코드는 아래에서 바로 확인 가능합니다

 

이전 글에서 픽사베이에서 API KEY를 발급받는 방법을 알아봤습니다.

 

본 글을 적용하려면 API key가 필요합니다.

 

키가 없다면, 이전 글을 읽어 보고 먼저 key를 받아 오세요.

 

 

 

API에서 사용할 수 있는 파라미터는 굉장히 다양합니다.

 

그렇지만 픽사베이가 영어권을 기본으로 하기 때문에,

실제로 한국어를 기준으로 검색해 보면 검색의 결과가 그리 많지는 않습니다.

 

이 말은, 파라미터를 많이 줘봐야 결과가 크게 달라지지 않는다는 말입니다.

결과가 없거나 결과의 수가 크게 줄어들 수도 있습니다.

 

따라서, 처음에는 파라미터를 최소화해서 테스트해보기 바랍니다.

 

예를 들어, 장미로 검색한다면 수천 개의 결과가 나옵니다.

 

이렇게 되면 일일이 검색을 해서 사용해야지,

API를 이용하는 의미가 있겠어요?

 

어차피 사람이 보고 결정할 거라면,

웹페이지에서 검색하는 게 빠르고 편합니다.

 

API를 이용할 때는 타깃을 정해놓고 하는 게 대부분일 텐데,

나름, 잘 검색해 보겠다고 파라미터를 이것저것 사용해 보면,

결과, 안 나옵니다.

 

이제, 코드를 만들어 봅니다.

 

import requests
PIXABAYKEY = '42..........'
PIXABAY = f'https://pixabay.com/api/?key={PIXABAYKEY}&image_type=photo&q='

 

 

기본 설정을 마칩니다.

PIXABAYKEY에는 본인의 키값을 넣어 줍니다.

 

본 코드는 가독성 때문에 위와 같이 무식하게 작성했는데,

파라미터를 다양하게 사용할 때는 parse를 이용해서 파라미터를 각각 설정하면 됩니다.

마지막에 사용해 봅니다.

 

API호출을 해봅니다. 함수로 만들어 봅니다.

def getImageLinksFromPixabay(keyword):
    query = f'{keyword}'
    links = []
    r = requests.get(PIXABAY+query).json()

 

어차피 API의 답은 json으로 오기 때문에, 결과를 받을 때 json으로 변환해서 받습니다.

 

'불면증'이라는 단어로 검색해 보면, 결과가 현재 기준 2개가 나옵니다.

 

 

이런 식의 json입니다.

 

'불면증'에 사용하는 약 이름인 '졸피뎀'으로 검색해 봅니다.

 

 

보셨죠? 키워드가 흔한 것이 아니긴 했지만, 결과가 없다고 나옵니다.

 

 

다시 코드를 이어 갑니다.

 

def getImageLinksFromPixabay(keyword):
    query = f'{keyword}'
    links = []
    r = requests.get(PIXABAY+query).json()
    if(r['totalHits'] == 0):
        return False
    else:
        for i in range(0, r['totalHits']):
            links.append(r['hits'][i]['webformatURL'])
    return links

 

검색된 이미지가 없으면 False를 반환합니다.

 

검색된 이미지들의 webformatURL형태의 링크를 리스트로 만들어서 반환합니다.

 

사용을 해볼까요.

 

links = getImageLinksFromPixabay(['불면증'])
if links != False:
    for link in links:
        print(link)

 

 

불면증으로 둘려보면 위에서 이미 말한 것처럼  2개가 다음과 같이 나옵니다.

 

각각의 이미지들을 클릭해서 보면 다음과 같습니다.

 

 

 

첫 번째 이미지는 불면증의 의미를 가지고 있다고 해도,

두 번째 이미지는 알 수가 없네요.

 

그럼 두 가지 키워드를 조합해서 사용해 보겠습니다.

 

links = getImageLinksFromPixabay(['졸피뎀','불면증'])
if links != False:
    for link in links:
        print(link)

 

결과는 다음과 같습니다.

 

 

 

결과가 없다고 나옵니다. 위에서 졸피뎀으로 검색했을 때 없다고 나온 것과 같습니다.

 

그런데, 검색어 순서를 바꿔서 다시 해보겠습니다.

 

links = getImageLinksFromPixabay(['불면증','졸피뎀'])
if links != False:
    for link in links:
        print(link)

 

마찬가지 결과입니다. 결과가 없다고 나옵니다.

 

불면증으로는 2개가 나오는데, 졸피뎀으로는 0개가 나오니, 

이걸 조합해서 검색하면 0으로 나오는 겁니다.

 

코드를 완성해 봅니다.

 

import requests
PIXABAYKEY = '428....'
PIXABAY = f'https://pixabay.com/api/?key={PIXABAYKEY}&image_type=photo&q='

def getImageLinksFromPixabay(keyword):
    query = f'{keyword}'
    links = []
    r = requests.get(PIXABAY+query).json()
    if(r['totalHits'] == 0):
        return False
    else:
        for i in range(0, r['totalHits']):
            links.append(r['hits'][i]['webformatURL'])
    return links
    

links = getImageLinksFromPixabay(['불면증'])
if links != False:
    for link in links:
        print(link)

 

위의 코드를 함수로 바로 이용하면 됩니다.

 

다양한 파라미터를 이용하여 결과가 바뀌는 코드는,

 

본 블로그의 다른 글에서 다루어 보겠습니다.