- 4,803
- 6,475
Понадобилось мне заливать аттачменты через CI на бх, получил API ключ от @itsLegend, и дальше... А дальше жопа. У XenForo есть документация, но весьма скудная в плане примеров. В сети примеров тоже не нашлось, по этому разбираться как с ней работать пришлось нам с @itsLegend.
Для начала стоит обратить внимание, что базовая часть работы с API указана отдельно от основной документации тут. Краткая выдержка от туда:
Так как моей целью было обновление аттачментов, то все примеры будут связаны только с этим.
Что бы залить аттачмент надо создать новый ключ аттачмента
Вариант с application/x-www-form-urlencoded:
Вариант с multipart/form-data:
С multipart/form-data можно сразу отправить файл:
В этих примерах:
тут:
Вариант с application/x-www-form-urlencoded:
Вариант с multipart/form-data:
В этих примерах:
тут:
тут:
Об ответах сервера
Все ответы приходят в json и там все очень понятно. Приведу примеры лишь некоторых
Ответ на запрос о посте
Ответ на запрос для загрузки аттачмента
Для начала стоит обратить внимание, что базовая часть работы с 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"
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"
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"
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
}
}