3e8cb5aa0f25ec80b8f4d969121d42e2d214a232
[covid19.git] / bin / fetch_daily_views.py
1 #!/usr/bin/env python3
2
3 ###############################################################################
4 #
5 # This script assumes the presence of the COVID-19 repo.
6
7 # It (1) reads in the article list and then (2) calls the Wikimedia API to 
8 # fetch view information for each article. Output is to a (3) TSV file.
9 #
10 #
11 ###############################################################################
12
13
14 #1 Load up the list of article names
15
16 #2 Repeatedly call the API with that list of names
17
18 #3 Save results as a TSV
19
20 import requests
21 import argparse
22 import json
23 import csv
24 import time
25 import os.path
26 import datetime
27
28
29
30 def parse_args():
31
32     parser = argparse.ArgumentParser(description='Call the views API repeatedly.')
33     parser.add_argument('-o', '--output_folder', help='Where to save output', default="", type=str)
34     parser.add_argument('-i', '--article_file', help='File listing article names', default="../resources/articles.txt", type=str)
35     parser.add_argument('-d', '--query_date', help='Date if not yesterday, in YYYYMMDD format please.', type=str)
36     args = parser.parse_args()
37
38     return(args)
39
40
41 def main():
42
43     args = parse_args()
44
45     outputPath = args.output_folder
46     articleFile = args.article_file
47     if (query_date):
48         queryDate = args.query_date
49     else:
50         queryDate = datetime.datetime.today().strftime("%Y%m%d")
51
52
53     with open(articleFile, 'r') as infileHandle:
54         theInfile = csv.reader(infileHandle, quotechar='"')
55         for currentLine in theInfile:
56             articleList.append(currentLine["Article"])
57
58     with open(outputPath, 'w') as outfile:
59         outfile.write("[")
60
61     i = 0 #iterator to deal with end of file
62
63     for a in articleList:
64         i = i+1
65         url= "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/all-agents/"
66         url= url + a + "/daily/" + queryDate + "/" + queryDate #for now, single date at a time
67
68
69         response = requests.get(url)
70         if raw_response.ok:
71             with open(outputPath, 'a') as outfile:
72                 json.dump(json.loads(ident_response.content), outfile)
73                 if i < len(revList):
74                     outfile.write(",\n")
75                 else: #at end of file
76                     outfile.write("\n")
77
78             time.sleep(1)
79
80
81     with open(outputPath, 'a') as outfile:
82         outfile.write("]")
83
84
85
86 if __name__ == "__main__":
87
88     main()

Community Data Science Collective || Want to submit a patch?