From bd56f852c956995f2b30bc7b278b31632d36660c Mon Sep 17 00:00:00 2001 From: yashasingh Date: Wed, 25 Oct 2017 17:49:49 +0530 Subject: [PATCH 1/3] Microtask 4 --- App/templates/App/task4.html | 112 +++++++++++++++++++++++++++++++++++ App/views.py | 79 ++++++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 App/templates/App/task4.html create mode 100644 App/views.py diff --git a/App/templates/App/task4.html b/App/templates/App/task4.html new file mode 100644 index 0000000..6703e1f --- /dev/null +++ b/App/templates/App/task4.html @@ -0,0 +1,112 @@ +{% load static %} + + + + + Microtask 4 + + + + + +
+ +
+

Tool to analyse quality of last 5 edits made by user

+
+
+ {% csrf_token %} +
+
+ + +
+
+
+
+ +
+
+
+
+ + {% if error %} +
+
+
+
+ {{error}} +
+
+
+
+ {% endif %} + +
+
+
+
+ About analysis parameters +

+

    +
  • Edit Quality +
  • Goodfaith: predicts whether an edit was saved in good-faith
  • +
  • Damaging: predicts whether or not an edit causes damage
  • +
  • Reverted: predicts whether an edit will eventually be reverted
  • +
    +
  • Article Quality +
  • Draft Qulity: predicts if the article will need to be speedy deleted (spam, vandalism, attack, or OK)
  • +
  • Assessment scale: predicts the (Wikipedia 1.0-like) assessment class of an article or draft
  • + +
+

+
+
+
+
+ + + {% for x in articles %} + +
+
+
+
+ User : {{x.user}} +
    +
  • Title = {{x.title}}
  • +
  • Comment = {{x.comment}}
  • +
  • Timestamp = {{x.timestamp}}
  • +
  • revisionID = {{x.revid}}
  • +
  • + Click here to check the difference.

    +
  • +
  • Edit Quality +
  • Goodfaith = {{x.goodfaith}}
  • +
  • Damaging = {{x.damaging}}
  • +
  • Reverted = {{x.reverted}}
  • +
    +
  • Article Quality +
  • Draft Quality = {{x.draftquality}}
  • +
  • Assessment Rating = {{x.quality}}
  • + +
+
+
+
+
+ + {% endfor %} + + + diff --git a/App/views.py b/App/views.py new file mode 100644 index 0000000..61e96c3 --- /dev/null +++ b/App/views.py @@ -0,0 +1,79 @@ +import json +import requests +import urllib.parse + +from django.http import HttpResponse +from django.shortcuts import render + + +def user_revisions_analysis(request): + """ + Display analysis of last 5 edits made by user. + """ + if request.method=='POST': + # Here, we get the username + username = request.POST['username'] + # if username is submitted blank + if not username: + return render(request, "App/task4.html", {"error": "Please enter a username"}) + + # if username is not blank + details = list() + parameters = {'action':'query', + 'format':'json', + 'list':'usercontribs', + 'uclimit':'5', + 'ucuser':username} + url_parameters = urllib.parse.urlencode(parameters) + url1 = 'https://en.wikipedia.org/w/api.php?{}'.format(url_parameters) + + # Recieved data in json-format + response = requests.get(url1) + + if response.status_code == 200: + lst = json.loads(response.text) + try: + # if username contains invalid value + if lst['error']: + return render(request, + 'App/task4.html', + {"error":lst['error']['info']} + ) + except: + # Edit data extracted + edits_data = json.loads(response.text) + contributions = [i for i in edits_data['query']['usercontribs']] + # if user has no edits + if len(contributions) == 0: + return render(request, + 'App/task4.html', + {"error": "0 edits found for username {}".format(username)}) + + for articles in contributions: + url2 = "https://ores.wikimedia.org/v3/scores/enwiki/" + str(articles['revid']) + # recieve ORES response + response2 = requests.get(url2) + if response2.status_code != 200: + return render(request, + 'App/tesk4.html', + {"error": "ORES failed to return response"}) + + # if successfull response from ORES + data = json.loads(response2.text) + analysis = data['enwiki']['scores'][str(articles['revid'])] + predictions = {'goodfaith': analysis['goodfaith']['score']['prediction'], + 'reverted': analysis['reverted']['score']['prediction'], + 'damaging': analysis['damaging']['score']['prediction'], + 'draftquality': analysis['draftquality']['score']['prediction'], + 'quality': analysis['wp10']['score']['prediction'], + 'title': articles['title'], + 'comment': articles['comment'], + 'timestamp': articles['timestamp'], + 'revid': articles['revid'], + 'user': articles['user']} + details.append(predictions) + context = {'articles': details} + return render(request,'App/task4.html',context) + + else: + return render(request,'App/task4.html',{}) From 5a73d361663848ffebb0f3d11ffc6c0879d89383 Mon Sep 17 00:00:00 2001 From: yashasingh Date: Mon, 30 Oct 2017 01:05:10 +0530 Subject: [PATCH 2/3] code updated --- App/views.py | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/App/views.py b/App/views.py index 61e96c3..b9ff2bd 100644 --- a/App/views.py +++ b/App/views.py @@ -16,7 +16,6 @@ def user_revisions_analysis(request): # if username is submitted blank if not username: return render(request, "App/task4.html", {"error": "Please enter a username"}) - # if username is not blank details = list() parameters = {'action':'query', @@ -24,40 +23,31 @@ def user_revisions_analysis(request): 'list':'usercontribs', 'uclimit':'5', 'ucuser':username} - url_parameters = urllib.parse.urlencode(parameters) - url1 = 'https://en.wikipedia.org/w/api.php?{}'.format(url_parameters) - + url_base = 'https://en.wikipedia.org/w/api.php?' # Recieved data in json-format - response = requests.get(url1) - + response = requests.get(url_base, params = parameters) if response.status_code == 200: - lst = json.loads(response.text) try: - # if username contains invalid value - if lst['error']: - return render(request, - 'App/task4.html', - {"error":lst['error']['info']} - ) - except: # Edit data extracted edits_data = json.loads(response.text) + if 'error' in edits_data: + return(render(request, + 'App/task4.html', + {"error": edits_data['error']['info']})) contributions = [i for i in edits_data['query']['usercontribs']] # if user has no edits if len(contributions) == 0: return render(request, 'App/task4.html', {"error": "0 edits found for username {}".format(username)}) - for articles in contributions: - url2 = "https://ores.wikimedia.org/v3/scores/enwiki/" + str(articles['revid']) + url_ores = "https://ores.wikimedia.org/v3/scores/enwiki/{}".format(str(articles['revid'])) # recieve ORES response - response2 = requests.get(url2) + response2 = requests.get(url_ores) if response2.status_code != 200: return render(request, - 'App/tesk4.html', + 'App/task4.html', {"error": "ORES failed to return response"}) - # if successfull response from ORES data = json.loads(response2.text) analysis = data['enwiki']['scores'][str(articles['revid'])] @@ -72,8 +62,15 @@ def user_revisions_analysis(request): 'revid': articles['revid'], 'user': articles['user']} details.append(predictions) - context = {'articles': details} - return render(request,'App/task4.html',context) - + except Exception as err: + return(render(request, + 'App/task4.html', + {'error': err})) + context = {'articles': details} + return render(request, 'App/task4.html', context) + else: + return render(request, + 'App/index.html', + {"error": 'Exit code {}'.format(str(response.status_code))}) else: return render(request,'App/task4.html',{}) From 80a5d12aef39f13f8b9f3e832227ce478e0bfaf0 Mon Sep 17 00:00:00 2001 From: yashasingh Date: Tue, 7 Nov 2017 18:19:47 +0530 Subject: [PATCH 3/3] Exception handling improved --- App/views.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/App/views.py b/App/views.py index b9ff2bd..ae61054 100644 --- a/App/views.py +++ b/App/views.py @@ -31,23 +31,17 @@ def user_revisions_analysis(request): # Edit data extracted edits_data = json.loads(response.text) if 'error' in edits_data: - return(render(request, - 'App/task4.html', - {"error": edits_data['error']['info']})) + raise Error(edits_data['error']['info']) contributions = [i for i in edits_data['query']['usercontribs']] # if user has no edits if len(contributions) == 0: - return render(request, - 'App/task4.html', - {"error": "0 edits found for username {}".format(username)}) + raise Error("0 edits found for username {}".format(username)) for articles in contributions: url_ores = "https://ores.wikimedia.org/v3/scores/enwiki/{}".format(str(articles['revid'])) # recieve ORES response response2 = requests.get(url_ores) if response2.status_code != 200: - return render(request, - 'App/task4.html', - {"error": "ORES failed to return response"}) + raise Error("ORES failed to return response") # if successfull response from ORES data = json.loads(response2.text) analysis = data['enwiki']['scores'][str(articles['revid'])]