XenForo 2 REST API

SR_team

like pancake
Автор темы
BH Team
4,803
6,475
Понадобилось мне заливать аттачменты через CI на бх, получил API ключ от @itsLegend, и дальше... А дальше жопа. У XenForo есть документация, но весьма скудная в плане примеров. В сети примеров тоже не нашлось, по этому разбираться как с ней работать пришлось нам с @itsLegend.

Для начала стоит обратить внимание, что базовая часть работы с API указана отдельно от основной документации тут. Краткая выдержка от туда:
  • базовый url запросов - https://blast.hk/api/
  • тип запроса может быть application/x-www-form-urlencoded (это дефолтный для GET вид запроса)
  • для передачи файлов должен быть использован запрос типа multipart/form-data
  • ключ авторизации передается в заголовке XF-Api-Key

Так как моей целью было обновление аттачментов, то все примеры будут связаны только с этим.

Что бы залить аттачмент надо создать новый ключ аттачмента
Вариант с application/x-www-form-urlencoded:
Bash:
curl -X POST "https://blast.hk/api/attachments/new-key" -H "XF-Api-Key: AUTHKEY" -H "Content-Type:application/x-www-form-urlencoded" --data "type=post&context[post_id]=1111"
Вариант с multipart/form-data:
Bash:
curl -X POST "https://blast.hk/api/attachments/new-key"-H "XF-Api-Key: AUTHKEY" -H "Content-Type:multipart/form-data" -F "type=post" -F "context[post_id]=1111"
С multipart/form-data можно сразу отправить файл:
Bash:
curl -X POST "https://blast.hk/api/attachments/new-key"-H "XF-Api-Key: AUTHKEY" -H "Content-Type:multipart/form-data" -F "type=post" -F "context[post_id]=1111" -F "attachment=@FILE"
В этих примерах:
  • AUTHKEY - ключ авторизации
  • 1111 - id сообщения
  • FILE - путь к файлу
Добавление аттачмента по ключу, если вы не передали файл сразу
Bash:
curl -X POST "https://blast.hk/api/attachments/"-H "XF-Api-Key: AUTHKEY" -H "Content-Type:multipart/form-data" -F "key=AKEY" -F "attachment=@FILE"
тут:
  • AUTHKEY - ключ авторизации
  • AKEY - ключ аттачмента, который возвращает предыдущий запрос, если не передать файл
  • FILE - путь к файлу
Добавление загруженного аттачмента к сообщению (иначе аттачмент можно будет скачать только по прямой ссылке, а под постом его не будет)
Вариант с application/x-www-form-urlencoded:
Bash:
curl -X POST "https://blast.hk/api/posts/1111/" -H "XF-Api-Key: AUTHKEY" -H "Content-Type:application/x-www-form-urlencoded" --data "attachment_key=AKEY"
Вариант с multipart/form-data:
Bash:
curl -X POST "https://blast.hk/api/posts/1111/" -H "XF-Api-Key: AUTHKEY" -F "attachment_key=AKEY"
В этих примерах:
  • AUTHKEY - ключ авторизации
  • 1111 - id сообщения
  • AKEY- ключ аттачмента, который возвращает предыдущий запрос, если не передать файл
Список всех аттачментов поста можно получить только запросив всю инфу о посте
Bash:
curl -X GET "https://blast.hk/api/posts/1111/" -H "XF-Api-Key: AUTHKEY"
тут:
  • AUTHKEY - ключ авторизации
  • 1111 - id сообщения
Удаление аттачмента
Bash:
curl -X DELETE "https://blast.hk/api/attachments/2222/" -H "XF-Api-Key: AUTHKEY"
тут:
  • AUTHKEY - ключ авторизации
  • 2222 - id аттачмента (attachment_id в предыдущем запросе)




Об ответах сервера
Все ответы приходят в json и там все очень понятно. Приведу примеры лишь некоторых

Ответ на запрос о посте
JSON:
{
    "post": {
        "attach_count": 1,
        "Attachments": [{
            "attach_date": 1612119280,
            "attachment_id": 84855,
            "content_id": 660775,
            "content_type": "post",
            "direct_url": "https://www.blast.hk/attachments/84855/",
            "file_size": 1374,
            "filename": "blum.txt",
            "height": 0,
            "is_audio": false,
            "is_video": false,
            "view_count": 0,
            "width": 0
        }],
        "can_edit": true,
        "can_hard_delete": false,
        "can_react": false,
        "can_soft_delete": true,
        "can_view_attachments": true,
        "is_first_post": false,
        "is_last_post": true,
        "is_reacted_to": false,
        "is_unread": false,
        "last_edit_date": 0,
        "message": "[QUOTE=\"CaJlaT, post: 660755, member: 102899\"]\n\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c\n[/QUOTE]\n\u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043d\u0435 \u043c\u043e\u0433\u0443",
        "message_parsed": "<blockquote class=\"xfBb-quote\" data-name=\"CaJlaT\">\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c</blockquote>\u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043d\u0435 \u043c\u043e\u0433\u0443",
        "message_state": "visible",
        "position": 165,
        "post_date": 1612113840,
        "post_id": 660775,
        "reaction_score": 0,
        "Thread": {
            "can_edit": true,
            "can_edit_tags": true,
            "can_hard_delete": false,
            "can_reply": true,
            "can_soft_delete": true,
            "can_view_attachments": true,
            "custom_fields": {
                "samp_version": {
                    "sampany": "sampany"
                }
            },
            "discussion_open": true,
            "discussion_state": "visible",
            "discussion_type": "discussion",
            "first_post_id": 647839,
            "first_post_reaction_score": 80,
            "Forum": {
                "breadcrumbs": [{
                        "node_id": 20,
                        "title": "\u0418\u0433\u0440\u044b",
                        "node_type_id": "Category"
                    },
                    {
                        "node_id": 41,
                        "title": "Grand Theft Auto: San Andreas",
                        "node_type_id": "Category"
                    }
                ],
                "description": "\u0425\u0443\u0434\u044b, \u0441\u043a\u0438\u043d\u044b, \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u043f\u0440\u043e\u0447.",
                "display_in_list": true,
                "display_order": 500,
                "node_id": 107,
                "node_name": null,
                "node_type_id": "Forum",
                "parent_node_id": 41,
                "title": "\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438",
                "type_data": {
                    "allow_posting": true,
                    "can_create_thread": true,
                    "can_upload_attachment": true,
                    "discussion": {
                        "allowed_thread_types": [
                            "discussion"
                        ],
                        "allow_answer_voting": false,
                        "allow_answer_downvote": false
                    },
                    "discussion_count": 724,
                    "forum_type_id": "discussion",
                    "is_unread": true,
                    "last_post_date": 1612118770,
                    "last_post_id": 660866,
                    "last_post_username": "W.Parson",
                    "last_thread_id": 71467,
                    "last_thread_prefix_id": 43,
                    "last_thread_title": "[Arz] \u0410\u0432\u0442\u043e\u043c\u0430\u0441\u043a\u0430",
                    "message_count": 25910,
                    "min_tags": 0,
                    "require_prefix": true
                },
                "view_url": "https://www.blast.hk/forums/107/"
            },
            "is_unread": false,
            "is_watching": true,
            "last_post_date": 1612113840,
            "last_post_id": 660775,
            "last_post_user_id": 11231,
            "last_post_username": "SR_team",
            "node_id": 107,
            "post_date": 1610558499,
            "prefix": "Lua",
            "prefix_id": 43,
            "reply_count": 165,
            "sticky": false,
            "sv_prefix_ids": [
                43,
                10
            ],
            "tags": [],
            "thread_id": 75917,
            "title": "HUD - \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0445\u0443\u0434\u043e\u0432",
            "User": {
                "activity_visible": true,
                "avatar_urls": {
                    "o": "https://www.blast.hk/data/avatars/o/11/11231.jpg?1590003878",
                    "h": "https://www.blast.hk/data/avatars/h/11/11231.jpg?1590003878",
                    "l": "https://www.blast.hk/data/avatars/l/11/11231.jpg?1590003878",
                    "m": "https://www.blast.hk/data/avatars/m/11/11231.jpg?1590003878",
                    "s": "https://www.blast.hk/data/avatars/s/11/11231.jpg?1590003878"
                },
                "can_ban": false,
                "can_converse": false,
                "can_edit": true,
                "can_follow": false,
                "can_ignore": false,
                "can_post_profile": true,
                "can_view_profile": true,
                "can_view_profile_posts": true,
                "can_warn": false,
                "custom_fields": {
                    "discord": "SR_team#2390",
                    "facebook": "",
                    "gender": "male",
                    "icq": "",
                    "instagram": "",
                    "occupation": "",
                    "skype": "",
                    "telegram": "SR_team",
                    "twitter": "",
                    "vkontakte": "",
                    "youtube": ""
                },
                "custom_title": "like pancake",
                "is_admin": false,
                "is_banned": false,
                "is_followed": false,
                "is_ignored": false,
                "is_moderator": true,
                "is_staff": true,
                "is_super_admin": false,
                "last_activity": 1612119169,
                "location": "",
                "message_count": 3741,
                "profile_banner_urls": {
                    "l": "https://www.blast.hk/data/profile_banners/l/11/11231.jpg?1608417025",
                    "m": "https://www.blast.hk/data/profile_banners/m/11/11231.jpg?1608417025"
                },
                "question_solution_count": 10,
                "reaction_score": 3760,
                "register_date": 1382731280,
                "signature": "\u0427\u0438\u0442-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043c\u0438\u0440\u0430\u043c: [B]samp.sr.team:1337[/B]",
                "trophy_points": 183,
                "user_id": 11231,
                "user_title": "like pancake",
                "username": "SR_team",
                "view_url": "https://www.blast.hk/members/11231/",
                "visible": true,
                "vote_score": 7,
                "warning_points": 0,
                "website": "https://sr.team"
            },
            "user_id": 11231,
            "username": "SR_team",
            "view_count": 11233,
            "view_url": "https://www.blast.hk/threads/75917/",
            "visitor_post_count": 54
        },
        "thread_id": 75917,
        "User": {
            "activity_visible": true,
            "avatar_urls": {
                "o": "https://www.blast.hk/data/avatars/o/11/11231.jpg?1590003878",
                "h": "https://www.blast.hk/data/avatars/h/11/11231.jpg?1590003878",
                "l": "https://www.blast.hk/data/avatars/l/11/11231.jpg?1590003878",
                "m": "https://www.blast.hk/data/avatars/m/11/11231.jpg?1590003878",
                "s": "https://www.blast.hk/data/avatars/s/11/11231.jpg?1590003878"
            },
            "can_ban": false,
            "can_converse": false,
            "can_edit": true,
            "can_follow": false,
            "can_ignore": false,
            "can_post_profile": true,
            "can_view_profile": true,
            "can_view_profile_posts": true,
            "can_warn": false,
            "custom_fields": {
                "discord": "SR_team#2390",
                "facebook": "",
                "gender": "male",
                "icq": "",
                "instagram": "",
                "occupation": "",
                "skype": "",
                "telegram": "SR_team",
                "twitter": "",
                "vkontakte": "",
                "youtube": ""
            },
            "custom_title": "like pancake",
            "is_admin": false,
            "is_banned": false,
            "is_followed": false,
            "is_ignored": false,
            "is_moderator": true,
            "is_staff": true,
            "is_super_admin": false,
            "last_activity": 1612119169,
            "location": "",
            "message_count": 3741,
            "profile_banner_urls": {
                "l": "https://www.blast.hk/data/profile_banners/l/11/11231.jpg?1608417025",
                "m": "https://www.blast.hk/data/profile_banners/m/11/11231.jpg?1608417025"
            },
            "question_solution_count": 10,
            "reaction_score": 3760,
            "register_date": 1382731280,
            "signature": "\u0427\u0438\u0442-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043c\u0438\u0440\u0430\u043c: [B]samp.sr.team:1337[/B]",
            "trophy_points": 183,
            "user_id": 11231,
            "user_title": "like pancake",
            "username": "SR_team",
            "view_url": "https://www.blast.hk/members/11231/",
            "visible": true,
            "vote_score": 7,
            "warning_points": 0,
            "website": "https://sr.team"
        },
        "user_id": 11231,
        "username": "SR_team",
        "view_url": "https://www.blast.hk/posts/660775/",
        "warning_message": ""
    }
}

Ответ на запрос для загрузки аттачмента
JSON:
{
    "key": "AKEY",
    "attachment": {
        "attach_date": 1612119848,
        "attachment_id": 84858,
        "content_id": 0,
        "content_type": "post",
        "direct_url": "https://www.blast.hk/attachments/84858",
        "file_size": 1374,
        "filename": "blum.txt",
        "height": 0,
        "is_audio": false,
        "is_video": false,
        "view_count": 0,
        "width": 0
    }
}