Очистить заголовки сообщений subreddit и использовать их в качестве имени файла, используя Praw - PullRequest
0 голосов
/ 18 апреля 2019

Мой код в настоящее время загружает изображения из заданного поддредита и назовет их в качестве исходного имени файла. То, что я хотел бы, чтобы код сделал, чтобы назвать их как то, что они размещены на Reddit. Кто-нибудь сможет мне помочь, пожалуйста? Я думаю, что это связано с Submission.title, но я не могу понять это. веселит.

import praw
import threading
from requests import get
from multiprocessing.pool import ThreadPool
import os


client_id = 'xxxxxxxxx'
client_secret = 'xxxxxxxxx'
user_agent = 'xxxxxxxxx'
image_directory = 'images'
thread_count = 16

target_subreddit = 'space'
image_count = '10'
order = 'hot'

order = order.lower()

reddit = praw.Reddit(client_id=client_id,
                     client_secret=client_secret, user_agent=user_agent)


def get_order():
    if order == 'hot':
        ready = reddit.subreddit(target_subreddit).hot(limit=None)
    elif order == 'top':
        ready = reddit.subreddit(target_subreddit).top(limit=None)
    elif order == 'new':
        ready = reddit.subreddit(target_subreddit).new(limit=None)
    return ready


def get_img(what):
    image = '{}/{}/{}'.format(image_directory,
                              target_subreddit, what.split('/')[-1])
    img = get(what).content
    with open(image, 'wb') as f:
        f.write(img)


def make_dir():
    directory = f'{image_directory}/{target_subreddit}'
    if not os.path.exists(directory):
        os.makedirs(directory)


def main():
    c = 1
    images = []
    make_dir()
    for submission in get_order():
        url = submission.url
        if url.endswith(('.jpg', '.png', '.gif', '.jpeg')):
            images.append(url)
            c += 1
            if int(image_count) < c:
                break

    results = ThreadPool(thread_count).imap_unordered(get_img, images)
    for path in results:
        pass

    print('Done')

if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 17 июля 2019

Да, так что если ваша переменная 'url' дает вам правильный URL, тогда просто submission.title должен дать вам заголовок. Возможно, вас спутали с кодировкой, поэтому вы можете захотеть преобразовать ее с помощью str () или получить немного более привлекательный бит с функцией кодирования. Кроме того, некоторые символы не допускаются во многих именах файлов, так что, возможно, попробуйте удалить недопустимые символы из заголовка.

...