Google 캘린더는 curl을 통해 액세스하여 JSON을 반환합니다. Google은 JSON의 표준 인 \ xHH 표기법을 사용하고 있습니다. 출력이 표준 출력 대신 브라우저 (또는 HTML을 구문 분석하는 다른 것)로 보내지는 경우 좋은 JSON 디코더 만 필요합니다.
JSON을 구문 분석하기 위해 명령 줄에서 수행 할 수있는 작업을 살펴 보겠습니다.
echo -en $(curl -s 'http://www.google.com/ig/calculator?hl=en&q=4^22') > ~/temp.html
이 우리에게 우리가 브라우저를 통해 볼 수있는 유효한 HTML을 얻을 수 있지만, 우리는 표준 출력을 통해 표시 할 수있는 일에 모든 것을 줄일 필요가있다. 을 -n은 것 에코 개행을 억제하면서, 에코 명령
echo -en "$(curl -s --connect-timeout 10 "http://www.google.com/ig/calculator?hl=en&q=2%20m%20in%20feet")" | sed -e 's/<sup>/ &/g' -e :a -e 's/<[^>]*>//g;/</N;//ba' | perl -MHTML::Entities -ne 'print decode_entities($_)' | iconv -f ISO-8859-1 -t UTF-8
은 -e, 예컨대 \의 X3E \의 x3c 및 \의 X26 (<>, 각각 &)로서 탈출 해석 일반적으로 추가합니다.
sed에 대한 파이프는 모든 (위 첨자) 태그 앞에 공백을 추가 한 다음 모든 HTML 태그를 제거합니다.
그런 다음 perl 로의 파이프는 ⁄과 같은 모든 HTML 엔티티를/(분수 슬래시)로 디코딩합니다. http://en.wikipedia.org/wiki/Html_special_characters#Character_entity_references_in_HTML
iconv에 대한 파이프는 ISO-8859-1 출력을 예상 UTF-8로 변환합니다.이것은 perl 라인이 제대로 변환 될 필요가있는 UTF-8 엔티티를 생성 할 수 있기 때문에 마지막으로 수행됩니다.
이것은 분수와 지수 (47/64는 47가 위 첨자 태그로 래핑되고 64는 아래 첨자 태그로 래핑되고 10^13은 위 첨자 태그로 래핑 됨)를 구별하는 데 여전히 문제가 있습니다.
우리는 슈퍼 바보 얻을 모든 특수 문자를 구문 분석하는 정말로 긴 나오지 라인을 만들 수 있습니다 (당신이 구문이 도착 얼마나 터무니 볼 수 있도록 애플 스크립트에 다음) :
set jsonResponse to do shell script "curl " & queryURL & " | sed -e 's/[†]/,/g' -e 's/\\\\x26#215;/*/g' -e 's/\\\\x26#188;/ 1\\/4/g' -e 's/\\\\x26#189;/ 1\\/2/g' -e 's/\\\\x26#190;/ 3\\/4/g' -e 's/\\\\x26#8539;/ 1\\/8/g' -e 's/\\\\x26#8540;/ 3\\/8/g' -e 's/\\\\x26#8541;/ 5\\/8/g' -e 's/\\\\x26#8542;/ 7\\/8/g' -e 's/\\\\x3csup\\\\x3e\\([0-9]*\\)\\\\x3c\\/sup\\\\x3e\\\\x26#8260;\\\\x3csub\\\\x3e\\([0-9]*\\)\\\\x3c\\/sub\\\\x3e/ \\1\\/\\2/g' -e 's/\\\\x3csup\\\\x3e\\([0-9]*\\)\\\\x3c\\/sup\\\\x3e/^\\1/' -e 's/(/(/g'"
† (단검) 문자는 MacRoman 세트 (Macintosh 인코딩)에서 십진수 160입니다. 16 진수로 이것은 0xA0 또는 \ xA0이며 UTF-8 인코딩으로 비 차단 공간으로 인코딩됩니다. 이는 Google이 통과 한 것입니다. 따라서 AppleScript에서 UTF-8의 비보안 영역을 대체하려면 Macintosh 인코딩으로 인해 † (단검)을 사용해야합니다. http://tlt.its.psu.edu/suggestions/international/bylanguage/mathchart.html#fractions
이야기의 도덕적를 처리 할 때 즉 :
도 나오지 라인이 다루는 몇 가지 특별한 분수 기호가 있습니다 JSON으로, 좋은 JSON 파서 만 사용하면된다.
하위 도덕은 다음과 같습니다. AppleScript를 사용하여 JSON을 처리하지 마십시오.
우수 답변, 감사합니다. 나는 같은 문제로 고군분투하고 있지만 자바에서는 어려움을 겪고있다. '\ xnn' 문자를 다루는 방법에 대한 제안이 있습니까? – Alp
@Alp 어딘가에 질문을 시작하셨습니까? 문제를 이해하고 도움을 얻으려면 자세한 내용이 필요합니다. – spex
감사합니다. 나는 질문이 이미 작동하도록 요청했다. http://stackoverflow.com/questions/15518340/json-returned-by-google-maps-query-contains-encoded-characters-like-x26-how-to – Alp