温馨提示:这篇文章已超过1291天没有更新,请注意相关的内容是否还可用!
使用 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 状态报告。


还没有评论,来说两句吧...