Naver搜索API合作申请注意事项(附API规范相关代码)

0oD三一o0

温馨提示:这篇文章已超过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 就会暴露出来。
Naver搜索API合作申请注意事项(附API规范相关代码)
对于所有的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 状态报告

免责声明:本文来自Naver站长平台,不代表0oD三一o0的观点和立场,如有侵权请联系本平台处理。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,1299人围观)

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

取消
微信二维码
微信二维码
支付宝二维码