2017-01-25 4 views
0

私はサブディレクトリをループしようとしていますが、上部のスティッキー・ポストは無視します。残念ながら、スティッキーを含む最初の5つの投稿を印刷することができます。これらをスキップしようとするさまざまな方法が失敗しました。下の私のコードの2つの異なる例。サブディレクトリにスティッキーをスキップするPython Praw

  subreddit = reddit.subreddit(sub) 
      for submission in subreddit.hot(limit=5): 

       # If we haven't replied to this post before 
       if submission.id not in posts_replied_to: 
        ##FOOD 

        if subreddit == 'food': 

         if 'pLEASE SEE' in submission.title: 
          pass 
         if "please vote" in submission.title: 
          pass 
         else: 
          print(submission.title) 
         if re.search("please vote", submission.title, re.IGNORECASE): 
          pass 
         else: 

          print(submission.title) 

私はドキュメント内にスティッキータグを気付いていましたが、それを正確に使用する方法はわかりませんでした。どんな助けもありがとうございます。

+0

文字列を小文字にして、 'submission.title.lower()'を確認してください –

+0

比較対象のタイトルを印刷して、どのものが付箋であるかをメモしてください。それは物事の正規表現の側面をデバッグするのに役立ちます。それ以外の場合は、@ al-averyの答えを使用してください。 –

+0

続行する前に、基本的なPythonチュートリアルを読むことを強くお勧めします。 –

答えて

2

It looks like you can get the id of a stickied post based on docs。だから、おそらくあなたは、固定されたポストのIDを得ることができます(stickyメソッドの 'number'パラメータで、固定されたポストの第1、第2、第3を教えてください; すべてのの貼り付けられた投稿を取得してください)、あなたがプルしようとしている投稿ごとに、まずそのIDを貼り付けられたIDと照合してください。

例:

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

、その後、あなたは必ず与えられたポストがstickiedされていないようにしたい、使用:

if post.id not in stickies: 
    do something 

が3よりも少なかった、ように見え、これは希望重複したIDを持つリストを提供しますが、問題はありません。 @Alエイブリーの答えに補遺として

+0

いくつかのサンプルコードは素晴らしいでしょう。 –

+0

OK、いくつかのコードで編集しました:) –

+0

実際には、ドキュメントに従って重複IDを返す代わりに、3未満であれば 'prawcore.NotFound'を送出します。 –

1

、あなたはこの関数は、ドキュメントのリード1ということを考慮に入れ

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 

ような何かを行うことによって与えsubreddit上のすべての付箋のIDの完全な検索を行うことができます無効なインデックスがstickに供給された場合にエラーが発生すると予想されますが、実際の動作は重複したIDが返されているようです。リストの代わりにsetを使用すると、たくさんの付箋がある場合は検索が速くなります。あなたはTrueと評価さsticked属性を持つstickiedている

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はこれを数回試しましたが、Traceback(最近の最後の呼び出し)エラーが発生します: ファイル "/Library/Frameworks/Python.framework/Versions/3.6/site/packages/praw/models/ .format(self .__ class __.__ name__、attribute)) AttributeError: 'Subreddit'オブジェクトには属性 'stick'がありません – Anekdotin

+0

@Eddwinn。それが期待される。私は誤って 'sticky'を' stick'と間違えた。今修正されました。 –

+0

Unfortunalyは、すべての投稿を今すぐスティッキーと見なします。粘着= get_all_stickies(reddit.subreddit(STR(subreddit))) 場合付箋: プリント(付箋) プリント(submission.title)他 : プリント( "スティッキーません:" + submission.title) – Anekdotin

2

の提出などの機能を使用します。あなたのループに次のものを追加してください。

if submission.stickied: 
    continue 

一般に、使用できるオブジェクトがあるかどうかを確認するために、使用しているオブジェクトの属性を確認することをお勧めします。参照:Determine Available Attributes of an Object

+0

私は提出の印刷欄を参照してください。私はもともとなぜそれが言及されていないのだろうと思っていたが、情報を見つける方法を指摘してくれてありがとう。 – Anekdotin

関連する問題