> On 26 Apr 2017, at 17:21, Peter Uhnak <i.uh...@gmail.com> wrote:
> 
> Maybe the content is not properly stored in the JSON on github' side? But you 
> can use base64 in `accept:` to make it work.
> 
> json := STONJSON fromString: (ZnClient new
>                      url: 'https://api.github.com/gists/5503544';
>                      accept: 'application/vnd.github.v3.base64+json';
>                      get).
> b64 := ((json at: 'files') at: 'thumbnail.png') at: 'content'.
> PNGReadWriter formFromStream: (Base64MimeConverter mimeDecodeToBytes: content 
> readStream).

Ah, great that you found a way to force the server to send the data in a more 
sensible way !

Using the latest code from Zn & NeoJSON, combining with another recent thread 
(accessing nested dictionaries), this could be written as:

json := NeoJSONObject fromString: (ZnClient new
                url: 'https://api.github.com/gists/5503544';
                accept: 'application/vnd.github.v3.base64+json';
                get).
b64 := json atPath: #('files' 'thumbnail.png' 'content').
PNGReadWriter formFromStream: (ZnBase64Encoder new decode: b64) readStream.

Sven

> Peter
> 
> 
> On Wed, Apr 26, 2017 at 04:50:04PM +0200, Sven Van Caekenberghe wrote:
>> I am puzzled by how they actually encoded the PNG as a String, I tried a 
>> couple of alternatives but I could not get binary data out of it so that it 
>> parsed successfully as PNG.
>> 
>> If I would have to encode binary data in JSON I would use Base64 encoding 
>> (but alternatives exist).
>> 
>>> On 24 Apr 2017, at 20:36, Juraj Kubelka <juraj.kube...@icloud.com> wrote:
>>> 
>>> Hi,
>>> 
>>> I was playing with GitHub Gist API and I have queried the following Gist: 
>>> https://gist.github.com/mbostock/5503544
>>> I was interested how the PNG image is returned: 
>>> https://gist.github.com/mbostock/5503544#file-thumbnail-png 
>>> 
>>> I can obtain the whole Gist executing:
>>> 
>>> STONJSON fromString: 
>>>     (ZnClient new
>>>             url: 'https://api.github.com/gists/5503544';
>>>             accept: 'application/vnd.github.v3+json';
>>>             get).
>>> 
>>> I can get PNG contents executing:
>>> 
>>> pngData := (ZnEasy get:
>>>     ((((STONJSON fromString: 
>>>             (ZnClient new
>>>                     url: 'https://api.github.com/gists/5503544';
>>>                     accept: 'application/vnd.github.v3+json';
>>>                     get)) at: 'files') at: 'thumbnail.png') at: 'raw_url')) 
>>> contents.
>>> PNGReadWriter formFromStream: rawPng readStream.
>>> 
>>> But the PNG image is part of the Gist query and can be retrieved by:
>>> 
>>> pngContent := ((((STONJSON fromString: 
>>>     (ZnClient new
>>>             url: 'https://api.github.com/gists/5503544';
>>>             accept: 'application/vnd.github.v3+json';
>>>             get)) at: 'files') at: 'thumbnail.png') at: 'content').
>>> 
>>> "As pngContent is a WideString, I cannot use:"
>>> PNGReadWriter formFromStream: pngContent readStream.
>>> 
>>> How can I read the PNG image from the pngContent? Any idea? 
>>> And the reverse question: How can I send the PNG bytes using JSON format? 
>>> 
>>> Thanks!
>>> Juraj
>>> 
>> 
>> 
> 


Reply via email to