Why don't you try and see if you can get a SPARQL query answered "by hand",
using `requests` + OAuth etc. and then, if you can, you'll know that you've
we've got a bug in SPARQLWrapper as opposed to an issue within your
application code.
The `requests` code should look something like the following + OAuth stuff:
```
r = requests.get(
ENDPOINT,
params={"query": QUERY},
auth=auth,
headers={"Accept": "application/sparql-results+json"}
)
```
Nick
On Fri, Dec 18, 2020 at 5:51 PM Frankie Robertson <
[email protected]> wrote:
> Dear RDFlib devs,
>
> I'm cross posting this from StackOverflow since it's a bit niche:
> https://stackoverflow.com/questions/65303450/how-to-authenticate-to-wikimedia-commons-query-service-using-oauth-in-python
> . I hope this is okay.
>
> I am trying to use the Wikimedia Commons Query Service[1] programmatically
> using Python, but am having trouble authenticating via OAuth 1.
>
> Below is a self contained Python example which does not work as expected.
> The expected behaviour is that a result set is returned, but instead a HTML
> response of the login page is returned. You can get the dependencies with
> `pip install --user sparqlwrapper oauthlib certifi`. The script should then
> be given the path to a text file containing the pasted output given after
> applying for an owner only token[2]. e.g.
>
> ```
> Consumer token
> deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
> Consumer secret
> deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
> Access token
> deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
> Access secret
> deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
> ```
>
> [1] https://wcqs-beta.wmflabs.org/ ;
> https://diff.wikimedia.org/2020/10/29/sparql-in-the-shadow-of-structured-data-on-commons/
>
> [2] https://www.mediawiki.org/wiki/OAuth/Owner-only_consumers
>
> ```python
> import sys
> from SPARQLWrapper import JSON, SPARQLWrapper
> import certifi
> from SPARQLWrapper import Wrapper
> from functools import partial
> from oauthlib.oauth1 import Client
>
>
> ENDPOINT = "https://wcqs-beta.wmflabs.org/sparql"
> QUERY = """
> SELECT ?file WHERE {
> ?file wdt:P180 wd:Q42 .
> }
> """
>
>
> def monkeypatch_sparqlwrapper():
> # Deal with old system certificates
> if not hasattr(Wrapper.urlopener, "monkeypatched"):
> Wrapper.urlopener = partial(Wrapper.urlopener,
> cafile=certifi.where())
> setattr(Wrapper.urlopener, "monkeypatched", True)
>
>
> def oauth_client(auth_file):
> # Read credential from file
> creds = []
> for idx, line in enumerate(auth_file):
> if idx % 2 == 0:
> continue
> creds.append(line.strip())
> return Client(*creds)
>
>
> class OAuth1SPARQLWrapper(SPARQLWrapper):
> # OAuth sign SPARQL requests
>
> def __init__(self, *args, **kwargs):
> self.client = kwargs.pop("client")
> super().__init__(*args, **kwargs)
>
> def _createRequest(self):
> request = super()._createRequest()
> uri = request.get_full_url()
> method = request.get_method()
> body = request.data
> headers = request.headers
> new_uri, new_headers, new_body = self.client.sign(uri, method,
> body, headers)
> request.full_url = new_uri
> request.headers = new_headers
> request.data = new_body
> print("Sending request")
> print("Url", request.full_url)
> print("Headers", request.headers)
> print("Data", request.data)
> return request
>
>
> monkeypatch_sparqlwrapper()
> client = oauth_client(open(sys.argv[1]))
> sparql = OAuth1SPARQLWrapper(ENDPOINT, client=client)
> sparql.setQuery(QUERY)
> sparql.setReturnFormat(JSON)
> results = sparql.query().convert()
>
> print("Results")
> print(results)
> ```
>
> Best regards,
> Frankie
>
> --
> http://github.com/RDFLib
> ---
> You received this message because you are subscribed to the Google Groups
> "rdflib-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rdflib-dev/c6bfb327-7f4d-4239-87da-2ab8441a5112n%40googlegroups.com
> <https://groups.google.com/d/msgid/rdflib-dev/c6bfb327-7f4d-4239-87da-2ab8441a5112n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
______________________________________________________________________________________
kind regards
*Dr Nicholas Car*
Data Systems Architect at SURROUND Australia Pty Ltd
Address Level 9, Nishi Building,
2 Phillip Law Street
New Acton Canberra 2601
Phone +61 477 560 177 <++61+477+560+177>
Email [email protected]
https://www.surroundaustralia.com
*Enhancing Intelligence Within Organisations*
*delivering evidence that connects decisions to outcomes*
[image: Australian-National-University-Logo-1 – ANU Centre for Water and
Landscape Dynamics]
*Dr Nicholas Car*
Adj. Senior Lecturer
Research School of Computer Science
The Australian National University
Canberra ACT Australia
https://orcid.org/0000-0002-8742-7730
https://cs.anu.edu.au/people/nicholas-car
--
http://github.com/RDFLib
---
You received this message because you are subscribed to the Google Groups
"rdflib-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rdflib-dev/CAP7nqh1VWazkFE9raQO3%2BcoKXZhL83RdPLurhEyMRVVAE9cfvQ%40mail.gmail.com.