Pythonista3를 사용하여 Twitter 검색에 히트 한 이미지와 동영상을 iPhone에 자동 저장

배경



마지막 기사 ( Pythonista3를 사용하여 Twitter의 TL을 iPhone으로 소리내어 읽으십시오. )와 동기는 거의 동일합니다. 이번에는 Twitter 검색 결과에서 이미지와 동영상만 추출하여 iPhone에 자동 저장합니다.

환경



iPhone8 13.2.3
Pythonista3 3.2
Tweepy 3.8.0

준비



· Pythonista3 설치
· Twitter API 등록 신청
· StaSh 설치
· tweepy, requests, youtube-dl 설치

코드



sav_photo_video.py
#!Pythonista3
#twitterから検索に一致した画像をiphoneのアルバムに納めるプログラム

import os, requests, photos, youtube_dl
import twitterconfig
from twitterconfig import api

#検索する言葉から画像と動画のurlのリストを返す関数
def twitter_to_url_out(q, max_id):
    gazou_suu = 0
    douga_suu = 0
    kensakukekka = api.search(q = q, count = 20, max_id = max_id)
    if max_id != None:
        kensakukekka = kensakukekka[1:]
    gazou_url_list = []
    douga_url_list = []
    max_id_list = []
    for match_tweet in kensakukekka:
        max_id_list.append(match_tweet.id)
        try:
            video_url = match_tweet.extended_entities['media'][0]['video_info']['variants'][1]['url']
            douga_url_list.append(video_url)
        except:
            try:
                for x in match_tweet.extended_entities['media']:
                    gazou_url = x['media_url']
                    gazou_url_list.append(gazou_url)
            except:    
                continue
    max_id = min(max_id_list)
    gazou_url_list = sorted(set(gazou_url_list), key=gazou_url_list.index)
    douga_url_list = sorted(set(douga_url_list), key=douga_url_list.index)
    return max_id, gazou_url_list, douga_url_list

#url_listを引数にとって、それぞれの動画を保存する関数
def douga_hozon(urllist):
    douga_suu = 0
    for url in urllist:
        try:
            with youtube_dl.YoutubeDL() as ydl:
                ydl.download([url])
            douga_suu += 1
        except:
            continue
    return douga_suu

#url_listを引数にとって、それぞれの画像を保存する関数
def gazou_hozon(urllist):
    gazou_list = []
    for url in urllist:
        response = requests.get(url)    
        try:
            response.raise_for_status()
        except:
            continue
        filename = str(url.split('/')[-1])
        newfile = open(filename,'wb')
        for chunk in response.iter_content(10000):
            newfile.write(chunk)
        newfile.close()
        gazou_list.append(filename)
    image_asset_list = []
    for gazou in gazou_list:
        image_asset = photos.create_image_asset(gazou)
        image_asset_list.append(image_asset)
        try:
            os.remove(gazou)
        except:
            continue
    album_list = photos.get_albums()
    album_name_dict = {}
    number = 0
    for album in album_list:
        album_name = str(album).split('"')[1]
        album_name_dict[album_name] = number
        number += 1
    if kensakukotoba in album_name_dict.keys():
        new_album = album_list[int(album_name_dict[kensakukotoba])]
    else:
        new_album = photos.create_album(kensakukotoba)
    new_album.add_assets(image_asset_list)
    gazou_suu = len(image_asset_list)
    return gazou_suu


kensakukotoba = input('検索したい言葉は\n')
hosiikazu = int(input('欲しい画像数は\n'))
max_id = None
s_gazou_url_list = []
s_douga_url_list = []
syu_kai = 1
while len(s_gazou_url_list) < hosiikazu:
    print(str(syu_kai) + '周目')
    max_id, gazou_url_list, douga_url_list = twitter_to_url_out(q = kensakukotoba, max_id = max_id)
    syu_kai += 1
    for gazou_url in gazou_url_list:
        s_gazou_url_list.append(gazou_url)
    for douga_url in douga_url_list:
        s_douga_url_list.append(douga_url)
    s_gazou_url_list = sorted(set(s_gazou_url_list), key=s_gazou_url_list.index)
    s_douga_url_list = sorted(set(s_douga_url_list), key=s_douga_url_list.index)
    if syu_kai == 30:
        break
douga_suu = douga_hozon(s_douga_url_list)
gazou_suu = gazou_hozon(s_gazou_url_list)
print('保存終了(画像数:' + str(gazou_suu) + ' , 動画数:' + str(douga_suu) + ')')

결과



처음 상태. 사진도 앨범도 없습니다.


프로그램을 열고 검색 키워드와 저장할 최소 매수를 지정합니다.


조금 기다려 ...


저장이 끝나면 끝납니다.


다시 살펴보면 자동으로 앨범이 만들어지고 이번에 저장된 이미지가 저장됩니다.




동영상은 pythonista의 코드가 있는 디렉토리에 있습니다.


해설



동영상을 사진처럼 앨범에 담는 방법을 몰랐습니다. (pythonista의 photos가 동영상에 비대응?) 아는 분이 계시다면 꼭 가르쳐 주세요.
검색 횟수의 리미트나 검색 방법은, 각자 사용하기 쉽도록 변경해 주세요.

도전



여러 번 사용하고 신경이 쓰인 것
○ 동영상을 더 잘 저장하는 방법
우선 시간이 있을 때 폴더 나누기 정도는 할 수 있도록 할까라고 생각했습니다.

○ 중복 이미지 자동 삭제
여러 번 같은 키워드로 검색하면, 아무래도 같은 이미지가 깜박이 저장되어있는 상태로. 같은 이름의 앨범은 할 수 없게 하고 있습니다만, 검색 결과와 기존의 앨범을 비교하는 부분이 있으면 좋을까라고 생각했습니다.

결론



하고 싶은 것은 형태가 되었습니다! 하지만, 사용하기 쉽게 하기 위한 개선의 여지는 아직도 있을 것 같습니다・・・

좋은 웹페이지 즐겨찾기