| author | ymh <ymh.work@gmail.com> |
| Wed, 11 Apr 2018 12:19:47 +0200 | |
| branch | documentation |
| changeset 693 | 09e00f38d177 |
| parent 359 | 46ad324f6fe4 |
| permissions | -rw-r--r-- |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
1 |
# -*- coding: utf-8 -*- |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
2 |
''' |
| 693 | 3 |
Requête DBPedia afin de déterminer dans quel pays sont les tag de localisation. |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
4 |
|
| 693 | 5 |
**Usage**: ``django-admin query_geo_inclusion [options]`` |
6 |
||
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
7 |
''' |
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
8 |
from django.conf import settings |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
9 |
from django.core.management.base import NoArgsCommand |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
10 |
from django.core.management.color import no_style |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
11 |
from hdabo.utils import show_progress |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
12 |
from hdabo.models import Tag |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
13 |
from hdalab.models import Country, GeoInclusion |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
14 |
from SPARQLWrapper import SPARQLWrapper, JSON |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
15 |
import re |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
16 |
|
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
17 |
class Command(NoArgsCommand): |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
18 |
def handle_noargs(self, **options): |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
19 |
self.style = no_style() |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
20 |
|
|
359
46ad324f6fe4
Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents:
283
diff
changeset
|
21 |
GeoInclusion.objects.all().delete() |
|
46ad324f6fe4
Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents:
283
diff
changeset
|
22 |
Country.objects.all().delete() |
|
46ad324f6fe4
Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents:
283
diff
changeset
|
23 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
24 |
qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None) |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
25 |
total = qs.count() |
| 693 | 26 |
|
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
27 |
#endpoint = SPARQLWrapper("http://dbpedia.org/sparql") |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
28 |
endpoint = SPARQLWrapper(settings.DBPEDIA_URI_TEMPLATE % ( 'sparql', '' )) |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
29 |
endpoint.setReturnFormat(JSON) |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
30 |
sparqltext = """ |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
31 |
SELECT ?resource WHERE { |
| 283 | 32 |
{ <%s> ?resource <http://dbpedia.org/ontology/Country> . } |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
33 |
UNION |
| 283 | 34 |
{ <%s> <http://dbpedia.org/ontology/country> ?resource . } |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
35 |
} |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
36 |
""" |
|
281
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
37 |
#resourceprefix = "http://dbpedia.org/resource/" |
|
bc0f26b1acc2
Hdalab : commands now work after update. Requests update with a dbpedia url from settings.
cavaliet
parents:
266
diff
changeset
|
38 |
resourceprefix = settings.DBPEDIA_URI_TEMPLATE % ( 'resource', '' ) |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
39 |
identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" |
| 693 | 40 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
41 |
writer = None |
| 693 | 42 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
43 |
for i,tag in enumerate(qs): |
| 283 | 44 |
endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri)) |
| 693 | 45 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
46 |
results = endpoint.query().convert()['results']['bindings'] |
| 693 | 47 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
48 |
if len(results) == 1: # We don't want places located in multiple countries |
| 693 | 49 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
50 |
resourceuri = results[0]['resource']['value'] |
| 693 | 51 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
52 |
if re.match(resourceprefix, resourceuri): |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
53 |
countrytxt = re.findall('([^/]+$)', resourceuri)[0] |
| 693 | 54 |
|
|
359
46ad324f6fe4
Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents:
283
diff
changeset
|
55 |
country, _ = Country.objects.get_or_create(dbpedia_uri=resourceuri) |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
56 |
GeoInclusion.objects.get_or_create(tag=tag, country=country) |
| 693 | 57 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
58 |
if resourceuri == identityuri: |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
59 |
countrytxt = '<is a country>' |
| 693 | 60 |
|
|
359
46ad324f6fe4
Correct qery_dbpedia and improve model.
ymh <ymh.work@gmail.com>
parents:
283
diff
changeset
|
61 |
country, _ = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri) |
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
62 |
GeoInclusion.objects.get_or_create(tag=tag, country=country) |
| 693 | 63 |
|
|
122
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
64 |
else: |
|
fde8335a037c
Added Geographic Inclusion in the Django version (server only)
veltr
parents:
diff
changeset
|
65 |
countrytxt = '<unknown>' |
| 693 | 66 |
|
67 |
writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer) |