piterskiy

Добавление сайтов в Яндекс.Вебмастер через API

Mar 2nd, 2018
24,896
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. //документация: https://tech.yandex.ru/webmaster/doc/dg/concepts/About-docpage/
  3. /* Создание приложения:
  4.  * https://oauth.yandex.ru/client/new
  5.  * ввести Название приложения
  6.  * Платформы: поставить галочку Веб-сервисы -> нажать Подставить Url для разработки (https://oauth.yandex.ru/verification_code)
  7.  * Доступы: Яндекс.Вебмастер -> галочку напротив Добавление сайтов ...
  8.  * нажать Создать
  9.  * скопировать ID. Если надо отредактировать -> https://oauth.yandex.ru/client/my
  10.  * oauth авторизация: подставить ID приложения и перейти по ссылке ниже:
  11.  * https://oauth.yandex.ru/authorize?response_type=token&client_id=сюда-вставить-id-приложения
  12.  * нажать кнопку Разрешить
  13.  * скопировать код и прописать его в переменную ниже $token:
  14.  */
  15. $token = '';//подставить token (действует 180 дней)
  16. $max_sites = 1703;//максимальное кол-во сайтов на 1 аккаунт (лимит: 1703)
  17. $verification = 'HTML_FILE';//Подтверждение прав с помощью: DNS, HTML_FILE, META_TAG, WHOIS
  18.  
  19. $urls = 'urls.txt';//файл с доменами или url
  20. $save_good = 'added_{uid}.txt';//сюда запишутся домены доб-ые в вебмастер (вместо {uid} подставиться id вебмастер-аккаунта)
  21. $save_bad = 'notadded_' . time() . '.txt';//сюда запишутся домены, кот не удалось добавить
  22.  
  23. //получить user_id:
  24. $api_url = 'https://api.webmaster.yandex.net/v3/user/';
  25. $user_id = curl ([ 10002 => $api_url, 10023 => ['Authorization: OAuth ' . $token] ]);
  26. $user_id = strstr($user_id, 'user_id') ? json_decode ($user_id, true)['user_id'] : die($user_id);
  27.  
  28. $good = []; $bad = []; $added = [];
  29. $save_good = str_replace ('{uid}', $user_id, $save_good);
  30. if (file_exists($save_good)) foreach (file($save_good, FILE_SKIP_EMPTY_LINES) as $str) $added[str_getcsv($str, "\t")[0]] = 1;
  31. $count = count($added);
  32.  
  33. foreach (file($urls) as $url)
  34. {
  35.     if ($count >= $max_sites){ echo 'Максимальное кол-во сайтов на 1 аккаунт достигнуто!'; break; }
  36.     if (substr($url, 0, 4) != 'http') $url = 'http://' . ltrim ($url, "/");
  37.     $domain = parse_url(trim($url), PHP_URL_HOST);
  38.     if ($domain && !$good[$domain] && !$bad[$domain] && !$added[$domain])
  39.     {
  40.         if ($uin = add_domain($domain, $user_id, 'Authorization: OAuth ' . $token))
  41.         {
  42.             $good[$domain] = $domain . "\t" . $verification . "\t" . $uin;//записать в формате csv
  43.             $count++;
  44.         }
  45.         else $bad[$domain] = true;
  46.     }
  47. }
  48. if (count($good)) file_put_contents($save_good, implode("\r\n", $good) . "\r\n", FILE_APPEND);
  49. if (count($bad)) file_put_contents($save_bad, implode("\r\n", array_keys($bad)));
  50.  
  51. printf ("Добавлено доменов в вебмастер: %s (общее кол-во добавленных сайтов: %s)\nНе получилось добавить: %s",
  52.         count($good), count($added)+count($good), count($bad));
  53.  
  54.  
  55. function add_domain ($domain, $user_id, $token)
  56. {
  57.     global $api_url, $verification;
  58.     //добавление доменов в вебмастер через api
  59.     //10002 -> url, 47 -> post, 10015 -> postfields, 42 -> headers
  60.     $response = curl ([ 10002 => $api_url . $user_id . '/hosts/', 47=> true, 10015=> json_encode(['host_url' => $domain]), 10023 => ['Content-type: application/json', $token] ]);
  61.     if ( !isset(json_decode($response)->host_id) ) return false;
  62.    
  63.     //подтверждение прав
  64.     $host_id = 'http:'.$domain.':80';
  65.     $response = curl ([ 10002 => $api_url . $user_id . '/hosts/' . $host_id . '/verification/?verification_type=' . $verification, 47=> true, 10023 => [ $token ] ]);
  66.     $response = json_decode($response);
  67.     if ( !isset($response->verification_uin) ) return false;
  68. return $response->verification_uin;
  69. }
  70.  
  71. function curl ($opt)
  72. {//var_dump(get_defined_constants(true)['curl']);//числовые знач констант
  73.     if (!is_array($opt)) return false;
  74.     $ch = curl_init();
  75.     //78 -> connecttimeout, 13 -> timeout, 19913 -> RETURNTRANSFER, 52 -> FOLLOWLOCATION, 68 -> MAXREDIRS, 58 -> AUTOREFERER
  76.     curl_setopt_array($ch, $opt + [78 => 5, 13=> 10, 19913 => true, 52 => true, 68 => 20, 58=> true]);
  77.     $response = curl_exec ($ch);
  78.     curl_close($ch);
  79. return $response;  
  80. }
Add Comment
Please, Sign In to add comment