[Python] Skicka DM till en ny följare med modulen tweepy

Permalänk
Medlem

[Python] Skicka DM till en ny följare med modulen tweepy

Jag försöker skapa en Twitterbot som skickar DM (direkt meddelande) till en ny följare med modulen tweepy. Men jag är inte säker hur jag kan hämta den som har precis valt att följa mig och skicka direkt. Jag har läst deras dokumentation av tweepy men inte hittat den rätta funktionen för detta.

Detta är min kod som det ser ut nu (inte all kod):

api = tweepy.API(auth) if event: api.send_direct_message(twitter_user, 'Thank you for following me. Cheers!')

Någon tanke hur jag kan ersätta event och twitter_user för att få detta script att fungera? Känner mig lite lost just nu.

Här hittar ni dokumentationen: http://pythonhosted.org/tweepy/html/api.html#direct-message-m...

Permalänk
Medlem

Använd dig av followers_ids eller new_followers.

Visa signatur

Define R4 / 4770k / Hydro H80i / Gigabyte GTX 760 / MSI Z87-G45 / A-Data 8GB 1600 MHz / EVO Basic 250GB / 3TB Seagate / Corsair 750W RM 80+ Gold Modular / BenQ 21.5" 1920x1080 x3

Permalänk
Hedersmedlem

`twitter_user` i din kod ska vara ett `user`-objekt i `tweepy`:s notation. Ett sådant kan du skapa från ett Twitter-ID genom exempelvis `get_user()`, men du ska inte behöva gå omvägen att förvandla `user`-objekt till ID-nummer och tillbaka igen, då du får en lista med just `user`-objekt direkt när du hämtar din lista med följare från Twitter.

För att hitta nya följare så borde du lagra alla nuvarande följare (fås direkt av `followers()`; lagras förslagsvis i en fil via modulen `pickle`) för att sedan, när skriptet körs nästa gång, åter hämta `followers()` och sålla ut de användare som inte fanns bland de existerande följare du lagrat. Loopa genom dessa nya användare, skicka ett meddelande till var och en och ersätt till slut den gamla listan med den nya kompletta lista du precis hanterat.

En spontan tanke är att addera varje ID till den gamla listan inne i loopen direkt när ett meddelande skickats och ha en felhanterare som permanent sparar denna modifierade lista som "nuvarande följare" ifall programmet avbryts. Det gör att du inte skickar multipla meddelanden bara för att ditt program kraschar, nätverket timar ut, etc., vilket skulle ge ett dåligt intryck.

Att du bör kolla hela listan med följare och inte bara lagra sista följar-ID och kolla "från den sista kända följaren och framåt" är för att sömlöst hantera situationen då någon väljer att sluta följa dig. Du skulle också kunna spara användare som en gång har varit följare i en separat lista (hittas genom att varje gång kontrollera vilka användare som är i din gamla lista men inte i din nya), och kanske hantera dessa speciellt om de väljer att åter följa dig (typ "Välkommen tillbaka", eller något; aktion kanske beroende på hur länge de varit borta, etc. — implementationsdetaljer).

För att hitta element unika för en lista gentemot en annan och vice versa så kan man förslagsvis använda datatypen `set`. Exempel:

>>> followers_old = set([1, 2, 3]) >>> followers_new = set([3, 4, 5]) >>> for user in followers_new - followers_old: ... print('Hej där, användare {}; kul att du börjat följa mig!'.format(user)) ... Hej där, användare 4; kul att du börjat följa mig! Hej där, användare 5; kul att du börjat följa mig! >>> for user in followers_old - followers_new: ... print('Dumma dig, användare {}, som slutat följa mig!'.format(user)) ... Dumma dig, användare 1, som slutat följa mig! Dumma dig, användare 2, som slutat följa mig! >>>

Ifall `tweepy` är "ordentligt" kodat så bör detta fungera sömlöst med listor med `user`-objekt.

Brasklapp för att jag aldrig använt detta API och kanske missat något i beskrivningen. Det är möjligt att det finns ett sätt att få direkt indikation på när en ny användare väljer att följa dig, så som du verkar tänka med `event` i din kod. En kort sökning tyder på att Twitter erbjuder ett push-baserat API som de benämner "streaming API", men det stöds inte av `tweepy` och kommer med en del övriga begränsningar.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Du ska ha ett stort tack för ditt långa och informativa inlägg phz! Det hjälpte mig enormt mycket att förstå hur jag kan göra nu. Ska sitta ner och försöka knacka ihop något.