API REST를 사용하여 갤러리 사진 다운로드

14313 단어 Python

개시하다


나는python으로 자신의 사진 라이브러리 계정에 로그인하여 앨범에 있는 사진을 꺼냈다. 그래서 나는 이 방법을 썼다.

만든 물건



독자 대상


python의 기초가 끝난 사람.
사진 소장품을 한꺼번에 다운로드하고 싶은 사람.

컨디션


macbook Air High Sierra 10.13.6
VScode 1.47.1
Python 3.7

설치할


Python 3.7
requests 2.24.0
opencv-python 4.3.0.36
pillow 7.2.0
filetype 1.0.7

가상 환경을 만들다


Mac의 터미널이나 경로를 통해 들어가면 VScode의 터미널을 열고 다음 코드를 한 줄 한 줄 실행하면 가상 환경이 완성됩니다.
python.py
pip install pipenv 
mkdir photozou_api
cd photozou_api
pipenv install --python=3.7
pipenv shell
pipenv shell 가상 환경에 진입합니다.

가져온 모듈


python.py
import requests
import json
import pprint
import os
import filetype
import time
from io import BytesIO
from PIL import Image
최종적으로 모두 8개의 이 모듈을 가져왔다.

저장할 폴더 만들기


python.py
path = '/Users/YOUR PC NAME/Downloads/album'
os.makedirs(path, exist_ok=True)
나는 로컬 다운로드 폴더에 코드를 써서'album'이라는 폴더를 만들었다.
가져오기os, makedirs가 지정한 곳에서 폴더를 만듭니다.exist_ok=True는 이미 같은 이름의 폴더가 있으면 통과해야 하는 코드다.

포토 라이브러리 API에서 앨범 이름 가져오기


사진 스토리지 API에는 API 방법photo_album이 있습니다.
python.py
url = 'https://api.photozou.jp/rest/photo_album.json'
r = requests.get(url, auth=(MAIL, PASSWORD), verify=False)
json_data = r.json()
data = json_data['info']['album']
지금부터 requests.get로 앨범명을 얻습니다.
사진 모음 API 포토album jsoninfoalbum, 그중에 앨범명이 있다.
내가 앨범이 몇 장이야?
그래서 저는 data에 모두 album라는 메시지를 넣고 포문으로 앨범명을 짓고 싶습니다.

얻은 앨범 이름으로 폴더 만들기


python.py
for i in data:
    # アルバム名のフォルダーを作成
    path = '/Users/YOUR PC NAME/Downloads/album/' + i['name']
    print(i['name'])
    os.makedirs(path, exist_ok=True)
dataname는 앨범 이름이다.
방금 path에 추가i['name']를 통해 다운로드 폴더에 생성된 album에 앨범 이름이 있는 폴더를 만들었습니다.os.makedirs 지정한 곳에 코드를 써서 폴더를 만듭니다.
모든 코드가 완성되면 실행하는 과정에서 오류가 발생하고 정지하더라도 후속으로 다운로드exist_ok=True해야 한다.

모두 다운로드했는지 확인


python.py
    # フォルダーの中のファイルの数を数える
    files = os.listdir(path)
    count = len(files)

    # 写真数比較
    print(i['photo_num'], count)

    # ファイル数が写真の数と同じかそれ以上なら
    if count >= i['photo_num']:
        continue
사진 소장 앨범의 사진 수량과 실제 다운로드한 장수가 같은지 확인하기 위해 이 코드를 for문에 추가합니다.
만약 글에서 다운로드한 사진의 수량이 사진이 소장하고 있는 앨범의 사진의 수량보다 많다면 아래의 이미지 다운로드 코드를 건너뛸 수 있다.

사진 모음 API에서 포토 앨범 사진 꺼내기


다음은 포토 컬렉션 APIphoto_album_photo API 방법입니다.
사진 모음 API 포토album_photo
이 안에는 앨범에 있는 사진의 정보가 있다.
python.py
    # アルバムの中の写真を取ってくる
    url = 'https://api.photozou.jp/rest/photo_album_photo.json'
    payload = {'album_id':i['album_id'], 'limit':'1000'}
    r = requests.get(url, params=payload, auth=(MAIL, PASSWORD), verify=False)
    json_data = r.json()
    data = json_data['info']['photo']
photo_album_photo의 API 방법을 url에 넣습니다.photo_album_photoalbum_idlimit의 매개 변수가 있다.payload에 매개변수가 지정되어 있습니다.limit가 1000인 이유는 사진 수집의 연속 방문 상한선이 1000이기 때문이다.
그림을 저장하기 전에 저장할 때 뒤에 번호가 있으면 지금 몇 장인지 알 수 있고 이해하기 쉬워서 숫자를 먼저 세고 싶어요.
python.py
num = 0

사진첩 저장


python.py
    for j in data:
        time.sleep(0.5)
        # アルバムの写真のタイトル名
        print(j['photo_title'])
        # アルバム内の写真URL
        url = j['original_image_url']
        # 写真のイメージデータを取ってくる
        r = requests.get(url, auth=(MAIL, PASSWORD), verify=False)
        # 写真のデータ形式
        kind = filetype.guess(r.content)
        im = Image.open(BytesIO(r.content))
        # 何枚かを足す1して計算している
        num+=1
        # 写真の名前をつけて保存している
        im.save(path + '/' + j['photo_title'] + '_' + str(num) + '.' + kind.extension)
    # exit()
첫 번째 for문에 쓰다.
먼저 타임으로 0.5초를 기다린다.
연속으로 저장할 경우 포토라이브러리 API가 연속적으로 저장되지 않도록 하기 위한 대책 때문이다.url에는 photo_album_photo의 사진 정보가 소개되어 있습니다.requests.get 사진의 이미지 데이터를 가져오고 있습니다.filetype에서 사진의 파일 형식을 식별했다.
이 사진png이면.png,jpeg.jpeg보존할 수 있다.
마지막으로 opencv를 사용하여 이미지를 저장합니다.
컨텐트는 저장 위치 + 이미지 이름 + 번호 + 파일 형식입니다.
마지막 장exit을 사용하면 앨범이 끝나면 멈춘다.

끝말


학창시절부터 찍은 사진은 당시 구글 사진과 같은 구름 보존지가 없던 시대에 사용됐다.
하지만 가능하다면 이 사진들을 구글 사진으로 옮기고 싶어 도전해봤습니다.
문과 출신 프로그래밍 초보자라 말을 잘못 쓴 부분이 있을 수 있지만, 용서해 주시면 죄송하겠습니다.
나도 지금 알고리즘을 가르치는 스승의 힘을 빌렸다.
만약 이 기사가 나처럼 사진을 한 번 다운로드하고 싶지만 할 수 없는 사람들을 도울 수 있다면 나는 매우 기쁠 것이다.
그리고 초보자도 있지만 이동하고 싶은 것도 있으니 밑에 github 링크를 붙여주세요.
복제 후 필요한 모듈을 가져오면 됩니다...!
【github】Photozou_all_download_by_APIREST

사이트 축소판 그림


Python, Requests 사용 방법
[Pythhon]requests 모듈을 사용하여 HTTP(s) 통신을 쉽게 수행
Python으로 디렉터리 (폴더) 의 mkdir,makedirs 만들기
재직 엔지니어가 파이썬 2진법 해석 방법을 설명하다[초보자용]
Python, OpenCV를 통해 이미지 파일 읽기, 저장(imread, imwrite)
파이톤을 통해 웹 이미지 등 파일 다운로드(개별, 일회용)
바이너리 Tips를 Python으로 처리
Python의 이미지 처리 라이브러리 Pillow(PIL) 사용 방법
Pythn+Bottle+Pillow를 응답으로 이미지 반환
↑신...!고맙습니다.이 글이 없으면 저장할 수 없어요...
pipenv를 사용합니다.pyenv+venv도 가능하지만, 현재pipenv는 환경 구축으로 사용 편의를 조사해 봤습니다.
[Python] 현재 디렉터리의 파일 수를 계산합니다

좋은 웹페이지 즐겨찾기