2017-01-25 2 views
0

Ich versuche, subreddits zu durchlaufen, aber möchte die klebrigen Pfosten an der Oberseite ignorieren. Ich kann die ersten 5 Posts drucken, leider inklusive der Stickies. Verschiedene pythonische Methoden, diese zu überspringen, sind gescheitert. Zwei verschiedene Beispiele meines Codes unten.Python Praw überspringendes klebriges in subreddits

Ich bemerkte ein klebriges Tag in den Dokumenten, aber nicht sicher, genau, wie man es benutzt. Jede Hilfe wird geschätzt.

+0

Machen Sie die Zeichenketten in Kleinbuchstaben und überprüfen Sie mit 'submission.title.lower()' –

+0

Könnten Sie die Titel, mit denen Sie vergleichen, ausdrucken und welche sind Stickies? Das würde beim Debuggen der Regex-Seite der Dinge helfen. Ansonsten benutze @ al-averys Antwort. –

+0

Ich empfehle dringend, ein grundlegendes Python-Tutorial zu lesen, bevor Sie fortfahren. –

Antwort

2

It looks like you can get the id of a stickied post based on docs. Vielleicht könntest du die ID (s) des/der vermerkten Posts erhalten (beachte, dass du mit dem Parameter 'number' der sticky-Methode sagen kannst, gib mir den ersten, zweiten oder dritten, klebrigen Post; benutze diesen um Ihr Vorteil, alle der stickied Beiträge zu bekommen) und für jede Vorlage, die Sie ziehen werden, überprüfen Sie zuerst seine ID gegen die Sticked IDs.

Beispiel:

# assuming there are no more than three stickies... 
stickies = [reddit.subreddit("chicago").sticky(i).id for i in range(1,4)] 

und dann, wenn Sie sicher, dass eine bestimmte Post machen wollen nicht stickied, zu verwenden:

if post.id not in stickies: 
    do something 

Es sieht aus wie, gab es weniger als drei, würde dies gebe dir eine Liste mit doppelten IDs, was kein Problem sein wird.

+0

Einige Beispielcode wäre nett. –

+0

Ok, bearbeitet mit etwas Code :) –

+0

Eigentlich wird 'prawcore.NotFound' ausgelöst, wenn es weniger als 3 gibt, anstatt doppelte IDs gemäß den Dokumenten zurückzugeben. –

1

Als Nachtrag Avery Antwort auf @Al, können Sie für die IDs aller Stickies auf einem bestimmten subreddit eine vollständige Suche durchführen etwas wie

def get_all_stickies(sub): 
    stickies = set() 
    for i in itertools.count(1): 
     try: 
      sid = sub.sticky(i) 
     except pawcore.NotFound: 
      break 
     if sid in stickies: 
      break 
     stickies.add(sid) 
    return stickies 

Diese Funktion berücksichtigt dabei, dass die Dokumentation führen ein einen Fehler zu erwarten, wenn ein ungültiger Index an stick übergeben wird, während das tatsächliche Verhalten scheint, dass eine doppelte ID zurückgegeben wird. Wenn Sie statt einer Liste eine set verwenden, wird die Suche schneller, wenn Sie eine große Anzahl von Stickies haben. Sie würden die Funktion als

subreddit = reddit.subreddit(sub) 
stickies = get_all_stickies(subreddit) 
for submission in subreddit.hot(limit=5): 
    if submission.id not in posts_replied_to and submission.id not in stickies: 
     print(submission.title) 
+0

Ive versuchte dies ein paar Mal, aber ich bekomme den Fehler Traceback (zuletzt letzten Aufruf): Datei "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/praw/models/ reddit/base.py ", Zeile 34, in __getattr__ .format (self .__ Klasse __.__ name__, Attribut)) AttributeError: 'Subreddit' -Objekt hat kein Attribut 'stick' – Anekdotin

+0

@Eddwinn. Das ist zu erwarten. Ich habe versehentlich "sticky" als "stick" vertippt. Jetzt behoben. –

+0

Leider betrachtet es jetzt jeden Beitrag als klebrig. Stickies = get_all_stickies (reddit.subreddit (str (subreddit))) wenn Stickies: print (Stickies) print (submission.title) sonst: print ("kein klebriges:" + submission.title) – Anekdotin

2

Submissions verwenden, die eine sticked Attribut stickied werden müssen, die True auswertet. Fügen Sie Ihrer Schleife Folgendes hinzu, und Sie sollten gut gehen.

Im Allgemeinen empfehle ich, die verfügbaren Attribute der Objekte, mit denen Sie arbeiten, zu überprüfen, um festzustellen, ob etwas verwendbares vorhanden ist. Siehe: Determine Available Attributes of an Object

+0

Ich sehe mit dem Druck vars der Vorlage. Ich wunderte mich ursprünglich, warum es nicht erwähnt wurde, aber danke, dass ich darauf hingewiesen habe, wie man die Informationen findet. – Anekdotin

Verwandte Themen