[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Trouble parsing a response
Re: Trouble parsing a response
Fri, 14 Dec 2018 16:59:12 +0100
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1
On 13-12-18 23:29, address@hidden wrote:
On 2018-12-13 23:03, Roel Janssen wrote:
On 13-12-18 17:06, address@hidden wrote:
On 2018-12-13 16:01, address@hidden wrote:
I tried with the file attached but got this because the driver does not
support URIs but only host, port, type, token:
Ah, I saw now that you already implemented URI on master :)
When I try calling this
;; Example query to wikidata listing cats
?item wdt:P31 wd:Q146.
;; #:port 80
;; #:token "..."
I get this fine result:
#<<response> version: (1 . 1) code: 200 reason-phrase: "OK" headers:
((date . #<date nanosecond: 0 second: 12 minute: 32 hour: 15 day: 13
month: 12 year: 2018 zone-offset: 0>) (content-type
application/sparql-results+json (charset . "utf-8")) (transfer-encoding
(chunked)) (connection close) (server . "nginx/1.13.6") (x-served-by .
"wdqs1005") (access-control-allow-origin . "*") (cache-control public
(max-age . 300)) (vary accept accept-encoding) (x-varnish . "644531744,
572094009, 417977651") (via "1.1 varnish (Varnish/5.1)" "1.1 varnish
(Varnish/5.1)" "1.1 varnish (Varnish/5.1)") (accept-ranges bytes) (age .
0) (x-cache . "cp1079 pass, cp3030 pass, cp3030 pass") (x-cache-status .
"pass") (server-timing . "cache;desc=\"pass\"")
(strict-transport-security . "max-age=106384710; includeSubDomains;
preload") (set-cookie .
"WMF-Last-Access=13-Dec-2018;Path=/;HttpOnly;secure;Expires=Mon, 14 Jan
2019 12:00:00 GMT") (set-cookie .
14 Jan 2019 12:00:00 GMT") (x-analytics . "https=1;nocookies=1")
(x-client-ip . "18.104.22.168")) port: #<input-output: file 8c37e70>>
My problem now is that I don't know how to separate the header from the
Ah, reading here
I found (response-port).
Here's what I did in SPARQLing-genomics:
(receive (header port)
;; Note: "text/csv" is the only format that is consistent for
multiple SPARQL back-ends (Virtuoso, BlazeGraph, ...)
(sparql-query ... #:type "text/csv")
(if (= (response-code header) 200) ; This means the query went OK.
#f)) ; Deal with errors at the #f.
(define (call-some-function port)
(let ((line (read-line port)))
(if (eof-object? line)
(format #t "Line: ~a~%" line)
;; Tail-recurse until we have processed each line.
This would be a really nice addition to the guile manual. Can I submit
it as a patch crediting you?
The SPARQLing-genomics code deals with more error codes, and processes
the lines in a more useful way.
Unfortunately this only took me one step further as I run into this
instead when trying to parse the port with (json->scm):
7 (apply-smob/1 #<catch-closure 9769550>)
705:2 6 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
619:8 5 (_ #(#(#<directory (guile-user) 9759910>)))
2312:4 4 (save-module-excursion _)
3831:12 3 (_)
24:1 2 (_)
311:18 1 (json-read-number _)
148:28 0 (read-number _)
json/parser.scm:148:28: In procedure read-number:
Throw to key `json-invalid' with args `(#<json-parser port:
#<input-output: string 98dea80>>)'.
Maybe this is a bug in (json)?
It looks like the JSON response is not (only) JSON, or simply invalid.
Maybe the "text/xml" or "text/csv" content-type will work better for
you. I noticed that each back-end provides their own structure for
XML and JSON, so I used the somewhat quirky CSV format as a
work-for-all response type.
Ok, good to know. Is this documented in your guile-sparql docs?
No. I think what SPARQL endpoints actually return is beyond the scope
of guile-sparql, and may change in the future anyway.
I hope this helps.
Thanks a lot for taking the time to write this. :)
I already met receive in the npm importer but I did not really learn to
use it yet. So whenever I see multiple objects returned I can part them
with receive! Nice.
Exactly. I'm glad my snippet helped.
- New library: guile-wikidata, swedebugia, 2018/12/09
- Re: New library: guile-wikidata, tomas, 2018/12/09
- Re: New library: guile-wikidata, Arne Babenhauserheide, 2018/12/09
- Re: New library: guile-wikidata, swedebugia, 2018/12/10
- Re: New library: guile-wikidata, Roel Janssen, 2018/12/11
- Re: New library: guile-wikidata, swedebugia, 2018/12/13
- Trouble parsing a response (Was: Re: New library: guile-wikidata), swedebugia, 2018/12/13
- Re: Trouble parsing a response (Was: Re: New library: guile-wikidata), Roel Janssen, 2018/12/13
- Re: Trouble parsing a response, swedebugia, 2018/12/13
- Re: Trouble parsing a response,
Roel Janssen <=
- Re: Trouble parsing a response (Was: Re: New library: guile-wikidata), swedebugia, 2018/12/26