Извлечение данных из текста из API с помощью bash - PullRequest
0 голосов
/ 25 марта 2020

У меня есть вызов, но я не нахожу никакой информации, в том числе здесь, о команде jq . Я пытался curl получить доступ к странице с помощью json API приложения. Так что я использую | чтобы запустить оба, но это всегда показывает ошибку.

curl -s "https://ip-api.com/#105.154.81.106" |  jq '.' 

В конце концов, я прочитал это «.» приходит каждый контент, но возвращается только:

parse error: Invalid numeric literal at line 1, column 2

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Правильная конечная точка для JSON, в соответствии с API документами :

http://ip-api.com/json

Так что вы можете попробовать это (не https):

curl -s http://ip-api.com/json/105.154.81.106 |  jq '.' 

Также указано в документах:

Human usage

You can call ip-api.com, without /json/, from cURL, Wget and other CLI HTTP clients and get colourized, pretty printed JSON
0 голосов
/ 25 марта 2020

Неаутентифицированный запрос на https://ip-api.com/#105 .154.81.106 с использованием пользовательского агента, такого как браузер, дает хорошую веб-страницу с контентом. Аналогичный запрос с использованием клиента командной строки, такого как curl или wget ...

$ curl -s --dump-header headers "https://ip-api.com/#105.154.81.106" > output

Вы можете подробно изучить выходные данные и заголовки.

$ cat output 
{
  "status" : "fail",
  "message": "SSL unavailable for this endpoint, order a key at https://members.ip-api.com/"
}

Похоже, JSON, но он окрашен в моем терминале.

$ cat -e output 
^[[39m{$
  ^[[96m"status"^[[39m : ^[[92m"fail"^[[39m,$
  ^[[96m"message"^[[39m: ^[[92m"SSL unavailable for this endpoint, order a key at https://members.ip-api.com/"^[[39m$
}$

Есть последовательности escape-строк. Давайте посмотрим, раскрывают ли заголовки:

$ cat headers
HTTP/1.1 403 Forbidden
Date: Wed, 25 Mar 2020 18:06:15 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 163
Access-Control-Allow-Origin: *
X-Ttl: 47
X-Rl: 42

Хорошо, Content-Type - это простой текст, а не json, так что это не неправильно , точно, но это удивительно. Более интересно, однако, что мы получили 403 . Это сообщение закажите ключ по https://members.ip-api.com/, но это реальное мясо.

Очевидно, что здесь вы должны получить ключ и сделать аутентифицированный запрос к API.

Вы можете очистить последовательности ANSI, используя инструмент, такой как ansifilter

$ ansifilter output | jq -r .message
SSL unavailable for this endpoint, order a key at https://members.ip-api.com/

Но нет никаких гарантий, что это API продолжит «работать» таким образом в будущем.

...