Разрыв строки API Graph Facebook

Я знаю, что по этому поводу уже есть множество вопросов, но я хотел бы добавить разрывы строк к сообщениям на стене Facebook, которые публикуются через Graph API. Я видел множество ответов, предлагающих использовать <center></center>, но это не работает для меня — в сообщении просто печатается «<center></center>».

Если быть точным, я использую Ruby и драгоценный камень Koala. Я пытаюсь опубликовать сообщение на странице пользователя. Если я опубликую как ссылку и попробую взломать центр в описании поста, он сработает, как и ожидалось, но не в сообщении, где он мне действительно нужен.

ОБНОВЛЕНИЕ: я отправил патч для драгоценного камня Koala, который позволяет установить параметр :no_encoding. Если/когда этот патч будет принят, он позволит использовать разрывы строк, если для этих параметров установлено значение true. На данный момент люди с этой проблемой могут воспользоваться моей вилкой драгоценного камня: https://github.com/ideaoforder/koala< /а>

Для тех, кому интересно, проблема была с Фарадеем. Метод запроса был установлен на :url_encode, который отправляет параметры как данные формы в кодировке URL. Параметры должны быть отправлены как обычные данные, а не данные формы (например, использование флага -d вместо флага -f в cURL). Мы достигаем этого, отправляя данные как часть строки запроса вместо закодированных параметров.


person ideaoforder    schedule 19.08.2011    source источник


Ответы (2)


То, что Facebook на самом деле принимает в сообщениях, время от времени меняется и не очень хорошо задокументировано. Учитывая это, я смог создать сообщение на стене с разрывами строк в сообщении, выполнив следующий запрос:

POST https://graph.facebook.com/me/feed?access_token=<token>&message=line+1%0D%0Aline+2

создание следующего поста на моей стене:

строка 1
строка 2

Важно знать, что и где кодируется URL. Параметр message в моем запросе API содержит %0D%0A, что эквивалентно управляющей последовательности \r\n (см. здесь). Если гем Koala, который вы используете, кодирует URL-адрес ввода, который вы ему вводите, то передача строки с escape-кодами \r\n должна быть всем, что вам нужно.

Обновление: может быть полезно попробовать создать сообщение вручную с помощью программы командной строки. Посмотрите, сможете ли вы заставить его работать с помощью этой команды curl:

curl 'https://graph.facebook.com/<wall id>?access_token=<access_token>' -d 'message=this+is+line+1%0D%0Athis+is+line+2'

Как обычно, замените идентификатор стены и параметры токена доступа своими собственными (попросите вашу программу на Ruby распечатать access_token, которую она получает от Facebook). Вы должны увидеть строку JSON в качестве вывода:

{"id":"wallid_postid"}

Где wallid и postid — числа. Если вместо этого вы получаете сообщение об ошибке, возможно, у Facebook или вашего приложения есть проблема с разрешениями.

Разрешения. Ваше приложение должно иметь разрешение manage_pages от администратора страницы, если вы публикуете от имени этой страницы, и пользователь должен в данный момент войти в ваше приложение и facebook, когда сделан запрос, если ваше приложение также не запросило разрешение offline_access. Если пользователь не вошел в систему, вы получите такой ответ:

{"error": {
    "type":"GraphMethodException",
    "message":"Unsupported post request."
}}
person jches    schedule 19.08.2011
comment
Не повезло с этим, к сожалению. Коала должна кодировать все URL-адреса, но мне придется покопаться в коде, чтобы увидеть, где и как. Будет ли какая-то разница, что я пишу на стене страницы, а не пользователя? Эти вещи обрабатываются немного по-разному в Graph API. - person ideaoforder; 23.08.2011
comment
С помощью этого метода я смог создать пост на стене страницы. Вы пытаетесь опубликовать как пользователь или как страница? Вы запросили правильные разрешения / можете ли вы создавать сообщения без новой строки? - person jches; 23.08.2011
comment
Это может помочь, если вы каким-то образом сможете регистрировать запросы, которые делает Koala. Приложение, которое я использую, написано на Python, поэтому, возможно, есть что-то другое в том, как Koala обрабатывает ваши входные данные. - person jches; 23.08.2011
comment
Я получаю сообщение об ошибке, когда пытаюсь выполнить запрос curl напрямую, опять же, возможно, из-за того, что я отправляю на страницу, как эту страницу: {"error":{"type":"GraphMethodException","message":"Unsupported post request."}} Я пробирался через часть кода Koala и есть функция CGI.encode. Я удалил это, и все равно не повезло. - person ideaoforder; 24.08.2011
comment
@ideaoforder: я тоже смог продублировать эту ошибку в своем приложении - у вас проблема с разрешениями. Смотрите примечание, которое я добавил. - person jches; 24.08.2011
comment
Чеслес, спасибо, что выдержали это со мной! Наконец-то мне удалось заставить curl-запрос работать — оказалось, что мне нужен был флаг данных (-d) вместо флага формы (-f). Если данные поступают в виде HTTP-сообщения, они работают, в противном случае — нет (я предполагаю, что данные, поступающие в виде строки запроса, кодируются на стороне Graph API). Я общаюсь с сопровождающим драгоценного камня Koala, чтобы установить, как заставить запрос работать как сообщение. Суть в том, что ваше решение верное. Я отпишусь, как только найду решение для ruby. Ваш вклад очень помог! - person ideaoforder; 24.08.2011

Я также некоторое время боролся с разрывом строки в статусах. Я обнаружил, что вместо того, чтобы мучиться со вставкой разрывов строк в статус, использование примечаний даст много гибкость, если желание может быть также удовлетворено с помощью этого подхода. Страница Facebook также может иметь собственные заметки. Просто добавьте ?sk=notes к URL-адресу своей учетной записи или Страницы, после чего вы увидите приложение Facebook Notes.

person taro    schedule 30.10.2012