温馨提示:这篇文章已超过915天没有更新,请注意相关的内容是否还可用!
使用 API 前的注意事项
申请API合作条件。
请通过Naver 合作提案申请。申请合伙提案后,可通过负责人进行详细咨询。
加盟希望网站:Naver
附属分类:网站收藏请求API
请先验证网站的所有权。
为了使用收集请求 API,您必须首先在网站管理员工具中验证网站的所有权。请参阅所有权确认常见问题以继续进行网站所有权确认。使用采集请求API时,如果对未确认的站点进行请求,将被视为错误。另外,在验证站点所有权时,如果url scheme、www与否、端口等不同,则被识别为单独的站点,因此所有权中标识的站点与收集请求API中指定的站点必须完全匹配。
请检查 robots.txt。
通过采集请求 API 采集的 URL 必须能够被 Naver 搜索机器人采集。请参考robots.txt 设置指南,检查是否允许收集目标 URL。
请检查 accessToken 进行身份验证。
对于附属用户,如果您查看 Search Advisor 的网站管理员工具提供的工具设置屏幕,API 附属状态和 API accessToken 就会暴露出来。
对于所有的API调用,将对应的accessToken以Bearer的形式放在http头的Authorization字段中。下面的示例是使用 Linux 环境中提供的 curl 命令的示例。
// 아래 accessToken 영역에 서치어드바이저에서 발급받은 토큰 정보를 넣어주세요 $ curl -v -H "Authorization: Bearer accessToken" -H "Content-Type: application/json" ...
请请求收集请求的 URL 作为目标网页的 URL。
请要求只收集普通用户在浏览器中可以看到的登陆页面。
如果浏览器显示的 URL 与请求 URL 不同,或者请求 URL 被重定向,可能会导致采集延迟或采集失败。在这种情况下,它被归类为“更新失败”并计算在内。
좋은 요청 예) 수집 요청 URL : http://www.your-site.com/1 수집 완료 URL : http://www.your-site.com/1 나쁜 요청 예) 수집 요청 URL : http://www.your-site.com/1 -> http://www.redirect-site.com/1 (302 Redirect) 수집 완료 URL : http://www.redirect-site.com/1
请使用代表 URL 提出请求。
如果 URL 不同但文档内容相同,请选择一个具有代表性的 URL 并仅请求一个。
如果请求多个 URL,则可能会收集重复的文档,并且可能会选择用户不想要的 URL 作为代表。 如果有多个 URL,建议
添加 canonical meta 作为代表 URL,重定向到代表 URL,或者通过 URL 清理只请求一个 URL。
注:指南
대표 URL 선정 예) 1. http://www.your-site.com/dir?id=1 2. http://www.your-site.com/dir?id=1&type= 3. http://www.your-site.com/dir?id=1&type=&sort= 4. http://www.your-site.com/dir?id=1&type=&sort=&key=1 1 ~ 4번 URL이 모두 동일 문서라면, 불필요한 query가 정리된 1번 URL을 대표로 선정하여 요청한다.
URL 端点
采集请求 API 提供以下两种。
网址提交
是一个提交收集请求和删除的url列表的API,调用url如下,
https://apis.naver.com/searchadvisor/crawl-request/submit.json
网址验证
它是一个API,用于检查收集请求和删除的url列表的语法是否有问题。它用于验证调用 url 提交时使用的请求正文(有效负载)。
https://apis.naver.com/searchadvisor/crawl-request/verify.json
API 限制和注意事项
每个会员每天的 url 提交 API 数量是有限的。根据 url submit API 的 payload 中的 url 数量扣除,超过给定限制时发送错误消息。
在 URL 提交 API 的情况下,如果您一次调用大量的 url 列表,搜索机器人的访问量可能会暂时增加。由于这会影响附属站点的流量,因此建议适当分配 url 列表的数量和 API 调用的时间。
使用 URL 提交 API
提交 API 的请求正文(有效负载)组成如下。
{ "urls": [ { "url": "content-location", "type": "update" }, { "url": "content_location", "type": "delete" } ] }
urls 属性
它采用列表的形式,在下部包含要收集和删除的 url 列表。
最多允许 1,000个子 URL 。
网址属性
输入要收集和删除的网站的url地址。
类型属性
更新:Naver搜索机器人直接访问并收集处理URL。
delete :删除NAVER集合存储中的url信息。搜索机器人不会访问要删除的 url。
限制
有效负载最多只允许 2MB。
如果更新和删除存在相同的 url,则删除优先。
仅在子网址中提供附属网站。
示例)
{ "urls": [ { "url": "http://www.your-site.com/article-1", "type": "update" }, { "url": "http://www.your-site.com/article-2", "type": "update" }, { "url": "http://www.your-site.com/article-3", "type": "delete" }, { "url": "http://www.your-site.com/article-4", "type": "delete" } ] }
示例)传输示例
$ curl -v -H "Authorization: Bearer access_token"\ -H "Content-Type: application/json"\ -XPOST https://apis.naver.com/searchadvisor/crawl-request/submit.json\ -d '{"urls":[{"url":"http://www.your-site.com/article-1","type":"update"},{"url":"http://www.your-site.com/article-4","type":"delete"}]}'
示例)传输示例(python)
... import requests submit_api = 'https://apis.naver.com/searchadvisor/crawl-request/submit.json' headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer access_token'} payload = '{"urls":[{"url":"http://www.your-site.com/1","type":"update"},{"url":"http://www.your-site.com/article-4","type":"delete"}]}' response = requests.post(submit_api, data=payload, headers=headers) print response.status_code print response.text ...
示例)传输示例(java)
... URI apiUrl = new URI("https://apis.naver.com/searchadvisor/crawl-request/"); UriComponents submitUri = UriComponentsBuilder.newInstance().uri(apiUrl).path("submit.json").build(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Authorization", "Bearer access_token"); String payload = "{\"urls\": [{\"url\": \"http://www.your-site.com/1\",\"type\": \"update\"}]}"; HttpEntity<String> request = new HttpEntity(payload, headers); RestTemplate rest = new RestTemplate(); ResponseEntity<String> response = rest.exchange( submitUri.toUriString(), HttpMethod.POST, request, String.class); System.out.println(response.getStatusCode()); ...
示例)传输示例(php)
<?php /* Bearer 타입의 인증키 정보 및 json header 지정 */ $auth_header = "Authorization: Bearer AAAAO...[ACCESS TOKEN 정보]..."; $json_header = "Content-type: application/json"; /* 수집대상 URL */ $payload_str = '{ "urls": [ { "url": "http://www.your-site.com/", "type": "update" } ] }'; $client_opt = array( CURLOPT_URL => "https://apis.naver.com/searchadvisor/crawl-request/submit.json", /* 수집요청 API 호출주소 */ CURLOPT_POST => true, /* POST 방식 */ CURLOPT_POSTFIELDS => $payload_str, /* 수집대상 URL payload 전달 */ CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => /* 헤더에 인증키 정보 추가 */ array("Host: apis.naver.com", "Pragma: no-cache", "Accept: */*", $auth_header, $json_header) ); $crawl_api = curl_init(); curl_setopt_array($crawl_api, $client_opt); $response = curl_exec($crawl_api); curl_close($crawl_api); var_dump($response) ?>
使用 URL 验证 API
verify API的request body(payload)和submit API一样,可以提前验证body的语法是否有问题。
示例)传输示例
$ curl -v -H "Authorization: Bearer access_token"\ -H "Content-Type: application/json"\ -XPOST https://apis.naver.com/searchadvisor/crawl-request/verify.json\ -d '{"urls":[{"url":"http://www.your-site.com/article-1","type":"update"},{"url":"http://www.your-site.com/article-4","type":"delete"}]}'
示例)传输示例(python)
... import requests verify_api = 'https://apis.naver.com/searchadvisor/crawl-request/verify.json' headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer access_token'} payload = '{"urls":[{"url":"http://www.your-site.com/1","type":"update"},{"url":"http://www.your-site.com/article-4","type":"delete"}]}' response = requests.post(verify_api, data=payload, headers=headers) print response.status_code print response.text ...
示例)传输示例(java)
... URI apiUrl = new URI("https://apis.naver.com/searchadvisor/crawl-request/"); UriComponents verifyUri = UriComponentsBuilder.newInstance().uri(apiUrl).path("verify.json").build(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Authorization", "Bearer access_token"); String payload = "{\"urls\": [{\"url\": \"http://www.your-site.com/1\",\"type\": \"update\"}]}"; HttpEntity<String> request = new HttpEntity(payload, headers); RestTemplate rest = new RestTemplate(); ResponseEntity<String> response = rest.exchange( verifyUri.toUriString(), HttpMethod.POST, request, String.class); System.out.println(response.getStatusCode()); ...
API 响应代码
这是调用收集请求 API 时服务器的响应消息。
状态码 | 响应码 | 响应消息 | 解释 |
---|---|---|---|
200 | 000 | 成功 | 转移成功。 |
401 | 024 | 身份验证失败 | 身份验证失败。 |
401 | 028 | 身份验证标头不存在 | 没有 OAuth 标头。 |
401 | 029 | Auth 认证失败 | 无法验证请求的授权值。 |
403 | 030 | 需要 Https 协议 | 请使用 https 协议发出请求。 |
404 | 051 | API 不存在 | 不存在的 API。 |
404 | 052 | 合作伙伴不存在 | 没有注册合作伙伴。 |
400 | 061 | 格式错误的网址 | 调用 URL 无效。 |
400 | 063 | 格式错误的编码 | 格式错误的编码字符。 |
413 | 064 | 超过最大帖子大小限制 2MB。 | 已超过 2MB 的最大 Post 大小。 |
403 | 071 | 不支持的返回格式 | 不支持的返回格式。 |
406 | 1000 | 在有效负载中找不到可请求的 URL | 请求失败。 |
400 | 1001 | 标头中存在无效参数 | 请求参数无效。 |
400 | 1002 | 有效载荷无效。无法解析 | 有效负载数据类型无效。 |
401 | 1003 | 无主站点。在 searchadvisor.naver.com 验证网站所有者 | 该网站尚未被验证为拥有。 |
401 | 1004 | 无效的联盟。在 searchadvisor.naver.com 申请联盟用户 | 这不是附属网站。 |
402 | 1005 | 超出要求。请求数已用尽。 | 你已经超出了你的每日要求。 |
500 | 1030 | 服务器错误 | API 服务器错误。 |
500 | 1031 | 后端服务器错误 | 这是内部互通服务器错误。 |
如果传输成功,您将收到如下所示的响应消息。
例如)submit.json API
{ "errorCode": 0, "message": "Success", "result": { "totalDeleteCount": 0, "totalUpdateCount": 1, "requestDeleteCount": 0, "requestUpdateCount": 1 } }
例如)verify.json API
{ "errorCode": 0, "message": "Success", "result": "valid" }
使用无效的身份验证密钥调用 API 时,会收到以下响应消息。
例如)submit.json API
{ "message": "Authentication failed. (인증에 실패했습니다.)", "errorCode": "024" } ex) verify.json API(如果不是附属用户) { "errorCode": 1004, "message": "Invalid alliance. Apply for alliance user at searchadvisor.naver.com", "result": "" }
检查附属 API 状态报告
协同采集请求API在Naver Search Robot需要采集的整个url列表中具有较高的优先级。请参考站长工具报告 > Affiliate API 状态,检查 API 请求收集的 URL 列表的收集是否有问题。
附属 API 状态每 2-3 小时更新一次。有关更多信息,请参阅官方网站管理员博客文章中的Affiliate API 状态报告。
还没有评论,来说两句吧...