Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. """
  2. Fetch threads on Linguistics SE in which an OP answered their own question.
  3. Author: lemontree @StackExchange
  4.  
  5. Python 3.8
  6. """
  7.  
  8. # SE API doc: https://api.stackexchange.com/docs
  9.  
  10. import requests
  11.  
  12. results = []
  13.  
  14. # specify which fields to include in the JSON response by creating a filter once
  15. # https://api.stackexchange.com/docs/create-filter
  16. filter = "!7wv08ifTL0xgF0gijVo7fRLBHujNWPSxGl"
  17. # qfilter = requests.get("https://api.stackexchange.com/2.2/filters/create?unsafe=false&filter=" + filter)
  18.  
  19. # define query parameters
  20. parameters = {
  21.     "order": "desc",
  22.     "sort": "activity",
  23.     "fromdate": 1420070400,  # only questions from 01-01-2015 and later
  24.     "pagesize": 50,
  25.     "site": "linguistics",
  26.     "filter": filter
  27. }
  28.  
  29. # questions have to be fetched page-wise
  30. last_page = 157  # last page under highest questions per page number (50)
  31. for page_nr in range(1, last_page+1):
  32.     parameters["page"] = page_nr
  33.     # request questions on current page
  34.     questions = requests.get("https://api.stackexchange.com/2.2/questions", params=parameters).json()["items"]
  35.  
  36.     for q in questions:
  37.         title = q["title"]
  38.         asker_id = q["owner"]["user_id"] if "owner" in q and "user_id" in q["owner"] else None
  39.         asker_nm = q["owner"]["display_name"] if "owner" in q and "display_name" in q["owner"] else None
  40.         answers = q["answers"] if "answers" in q else []
  41.  
  42.         for a in answers:
  43.             link = a["link"]
  44.             answerer_id = a["owner"]["user_id"] if "owner" in a and "user_id" in a["owner"] else None
  45.             answerer_nm = a["owner"]["display_name"] if "owner" in a and "display_name" in a["owner"] else None
  46.             votes = a["score"]
  47.             # positive score and answerer == asker: add to results
  48.             if votes > 0 and \
  49.                     (answerer_id is not None and answerer_id == asker_id or
  50.                      answerer_nm is not None and answerer_nm == asker_nm):
  51.                 results.append((title, link, votes))
  52.  
  53. # print the top 10 results in Markdown format sorted by score on answer
  54. for res in sorted(results, key=lambda tpl: tpl[2], reverse=True)[:10]:
  55.     title = res[0]
  56.     link = res[1]
  57.     print("  - " + "[" + title + "]" + "(" + link + ")")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement