Как отправить смайлик через bash скрипт для бота Telegram с помощью curl? - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь отправить смайлик / смайлик своему боту Telegram, используя скрипт bash.Этот bash-скрипт вызывает Telegram API следующим образом:

curl -s -X POST 'https://api.telegram.org/'$API'/sendMessage' -F chat_id=$chat -F text=$text

Поскольку bash-скрипт не является Unicode, я не могу просто скопировать / вставить эмодзи из Интернета.Поэтому я попытался использовать варианты Emoji UTF-8, но символ обратной косой черты продолжает экранироваться.

Ожидаемый вывод json должен быть следующим: "text":"\ud83d\udd14"

Вместо этого я получаю:

Вход: $text = \xF0\x9F\x98\x81 Выход JSON = "text":"\\xF0\\x9F\\x98\\x81\\"

Вход: $text = u'\U0001F604' Выход JSON = "text": "u'\\U0001F604'\"

Вход: $text = \U0001F514 Выход JSON = "text":"\\U0001F514"

Вход: $text = "(1f600)" Выход JSON = "text":"\"(1f600)\""

Вход: $text = \ud83d\ude08 Выход JSON = "text":"\\ud83d\\ude08"

Вход: $text = \\\ud83d\\\udd14 Выход JSON ="text":"\\\\\\ud83d\\\\\\udd14"

Каков правильный синтаксис для отправки смайликов с использованием сценария bash и curl моему боту Telegram?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Вы можете использовать echo -e '\U0001F514' для получения смайликов

curl -F "text=`echo -e '\U0001F514'` - it's a bell" "https://api.telegram.org/$API/sendMessage?chat_id=$chat"

или $'\U0001F514'

curl -F "text="$'\U0001F514'" - it's a bell" "https://api.telegram.org/$API/sendMessage?chat_id=$chat"
0 голосов
/ 24 апреля 2018

Генерация JSON для Telegram API

Если ваш вопрос касается кодировки JSON, пусть jq выяснит это для вас:

s='?'  ## or s=$'\360\237\224\224'

json=$(jq -anc --arg id "$chat" --arg s "$s" '{"chat_id": $id, "text": $s}')
curl -X POST -H "Content-Type: application/json" -d "$json" \
  "https://api.telegram.org/$API/sendMessage"

От JSON до строкового литерала

В bash 4.0 или новее, сама оболочка может попросить дать вам буквенную строку ASCII-печати, которая будет соответствовать многобайтовому символу.

LC_ALL=C printf "s=%q\n" "$(jq -r . <<<'"\ud83d\udd14"')"

... выведет:

s=$'\360\237\224\224'

Из строкового литерала в JSON

Чтобы пойти в другом направлении:

s=$'\360\237\224\224'
jq -anM --arg s "$s" '$s'

... выдает в качестве вывода:

"\ud83d\udd14"
...