Получать тело представления Reddit через PushShift? - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь получить сообщения от subreddit. Я пробовал PRAW, но потом я обнаружил, что в списке есть ограничение в 1000 сообщений. Мне нужно больше, поэтому я попытался использовать pushshift.io. Я следовал за учебником, и код ниже. Однако я не могу получить само сообщение: если я использую submisson.selftext, он возвращает пустую строку, а если я использую только submission, он возвращает Submisson(id=).

def make_request(uri, max_retries = 5):
    def fire_away(uri):
        response = requests.get(uri)
        assert response.status_code == 200
        return json.loads(response.content)
    current_tries = 1
    while current_tries < max_retries:
        try:
            time.sleep(1)
            response = fire_away(uri)
            return response
        except:
            time.sleep(1)
            current_tries += 1
    return fire_away(uri)
def pull_posts_for(subreddit, start_at, end_at):

    def map_posts(posts):
        return list(map(lambda post: {
            'id': post['id'],
            'created_utc': post['created_utc'],
            'prefix': 't4_'
        }, posts))

    SIZE = 500
    URI_TEMPLATE = r'https://api.pushshift.io/reddit/search/submission?subreddit={}&after={}&before={}&size={}'

    post_collections = map_posts( \
        make_request( \
            URI_TEMPLATE.format( \
                subreddit, start_at, end_at, SIZE))['data'])
    n = len(post_collections)
    while n == SIZE:
        last = post_collections[-1]
        new_start_at = last['created_utc'] - (10)

        more_posts = map_posts( \
            make_request( \
                URI_TEMPLATE.format( \
                    subreddit, new_start_at, end_at, SIZE))['data'])

        n = len(more_posts)
        post_collections.extend(more_posts)
    return post_collections
subreddit = 'fear'
end_at = math.ceil(datetime.utcnow().timestamp())
start_at = math.floor((datetime.utcnow() -              
                       timedelta(days=365*55)).timestamp())
posts = pull_posts_for(subreddit, start_at, end_at)
reddit = praw.Reddit(client_id=cid,
                     client_secret=secret, password=pass_word,
                     user_agent='anything', username=user_name)
posts_from_reddit = []

for submission_id in np.unique([ post['id'] for post in posts ]):
    submission = reddit.submission(id=submission_id)
    posts_from_reddit.append(submission)

Я не уверен, что нужно сделать, чтобы получить содержание целых постов?

...