]> code.communitydata.science - covid19.git/blob - bin/fetch_daily_views.py
7ce9c5ac9597bca4dad0abc8cc28cd34d5a8b5d2
[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) JSON, TSV, and 
9 # Feather file.
10 #
11 #
12 ###############################################################################
13
14
15 #1 Load up the list of article names
16
17 #2 Repeatedly call the API with that list of names
18
19 #3 Save results as a TSV
20
21 import requests
22 import argparse
23 import json
24 import csv
25 import time
26 import os.path
27 import datetime
28
29
30
31 def parse_args():
32
33     parser = argparse.ArgumentParser(description='Call the views API repeatedly.')
34     parser.add_argument('-o', '--output_folder', help='Where to save output', default="../data/", type=str)
35     parser.add_argument('-i', '--article_file', help='File listing article names', default="../resources/articles.txt", type=str)
36     parser.add_argument('-d', '--query_date', help='Date if not yesterday, in YYYYMMDD format please.', type=str)
37     args = parser.parse_args()
38
39     return(args)
40
41
42 def main():
43
44     args = parse_args()
45
46     outputPath = args.output_folder
47     articleFile = args.article_file
48
49     if (args.query_date):
50         queryDate = args.query_date
51     else:
52         yesterday = datetime.datetime.today() - datetime.timedelta(days=1)
53         queryDate = yesterday.strftime("%Y%m%d")
54
55     queryDate = queryDate + "00" #requires specifying hours
56
57
58     articleList = []
59     with open(articleFile, 'r') as infileHandle:
60         #theInfile = csv.reader(infileHandle, quotechar='"')
61         theInfile = csv.reader(infileHandle)
62         next(theInfile) #skip header
63         for currentLine in theInfile:
64             articleList.append(currentLine)
65
66     j_Out = outputPath + "dailyviews" + queryDate + ".json"
67     with open(j_Out, 'w') as outfile:
68         outfile.write("[")
69
70     i = 0 #iterator to deal with end of file
71
72     for a in articleList:
73         a = a[0] #destringify
74         i = i+1
75         url= "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/all-agents/"
76         url= url + a + "/daily/" + queryDate + "/" + queryDate #for now, single date at a time
77
78
79         response = requests.get(url)
80         if response.ok:
81
82             #do json entry
83             j=json.loads(response.content)
84             with open(j_Out, 'a') as j_outfile: 
85                 json.dump(j, j_outfile)
86                 if i < len(articleList):
87                     j_outfile.write(",\n")
88                 else: #at end of file
89                     j_outfile.write("\n")
90
91             #do tsv entry
92             #with open(outputPath + "dailyviews" + queryDate + ".tsv", 'a') as t_outfile: 
93             #    dw = csv.DictWriter(t_outfile, sorted(j[0].keys()), delimiter='\t')
94             #    if i==1:
95             #        dw.writeheader()
96             #    dw.writerows(j)
97
98             time.sleep(.1)
99
100     with open(j_Out, 'a') as j_outfile:
101         j_outfile.write("]")
102
103     #read the json back in and make a feather file?
104
105
106
107 if __name__ == "__main__":
108
109     main()

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