Python запустить скрипт для каждой записи в словаре - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь написать простую python программу, которая использует tweepy API для твиттера и wget для получения ссылки на изображение из идентификатора поста в твиттере (Пример: twitter.com/ExampleUsername/12345678 ), затем загрузите изображение по ссылке. Реальная программа работает нормально, но есть проблема. Хотя он выполняет FOR для каждого идентификатора в словаре (если имеется 2 идентификатора, он запускается 2 раза), он не использует каждый идентификатор, поэтому сценарий в итоге просматривает последний идентификатор в словаре, а затем загружает изображение из этого один и тот же идентификатор, однако много раз есть идентификатор в словаре. Кто-нибудь знает, как заставить скрипт запускаться снова для каждого идентификатора?

tl; dr Я хочу, чтобы программа посмотрела на первый идентификатор, взяла ссылку на его изображение, скачала его и затем сделала то же самое со следующим ID, пока не будут выполнены все идентификаторы.

#!/usr/bin/env python
# encoding: utf-8

import tweepy #https://github.com/tweepy/tweepy
import wget


#Twitter API credentials
consumer_key = "nice try :)"
consumer_secret = "nice try :)"
access_key = "nice try :)"
access_secret = "my, this joke is getting really redundant"

def get_all_tweets():
        #authorize twitter, initialize tweepy
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_key, access_secret)
        api = tweepy.API(auth)

        id_list = [1234567890, 0987654321]
        # Hey StackOverflow, these are example ID's. They won't work as they're not real twitter ID's, so if you're gonna run this yourself, you'll want to find some twitter IDs on your own

# tweets = api.statuses_lookup(id_list)
        for i in id_list:
            tweets = []
            tweets.extend(api.statuses_lookup(id_=id_list, include_entities=True))
            for tweet in tweets:
                spacefiller = (1+1)
                # this is here so the loop runs, if it doesn't the app breaks 
            a = len(tweets)
            print(tweet.entities['media'][0]['media_url'])
            url = tweet.entities['media'][0]['media_url']
            wget.download(url)
get_all_tweets()

Спасибо, ~ CS

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Я понял это! Я знал, что l oop использовался для чего-то ...

Я переместил все из a = len(tweets в wget.download(url) в for tweet in tweets: l oop и удалил for i in id_list: l oop.

Благодаря tdelany эта программа работает сейчас! Спасибо всем!

Вот новый код, если кто-то хочет:

#!/usr/bin/env python
# encoding: utf-8

import tweepy #https://github.com/tweepy/tweepy
import wget


#Twitter API credentials
consumer_key = "nice try :)"
consumer_secret = "nice try :)"
access_key = "nice try :)"
access_secret = "my, this joke is getting really redundant"

def get_all_tweets():
        #authorize twitter, initialize tweepy
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_key, access_secret)
        api = tweepy.API(auth)

        id_list = [1234567890, 0987654321]
        # Hey StackOverflow, these are example ID's. They won't work as they're not real twitter ID's, so if you're gonna run this yourself, you'll want to find some twitter IDs on your own

        tweets = []
        tweets.extend(api.statuses_lookup(id_=id_list, include_entities=True))
        for tweet in tweets:
            a = len(tweets)
            print(tweet.entities['media'][0]['media_url'])
            url = tweet.entities['media'][0]['media_url']
            wget.download(url)
get_all_tweets()
0 голосов
/ 15 апреля 2020

Одна странная вещь, которую я вижу, состоит в том, что переменная, которую я объявил во внешнем l oop, никогда не используется после on. Разве ваш код не должен быть

 tweets.extend(api.statuses_lookup(id_=i, include_entities=True))

, а не id_ = id_list, как вы написали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...