SHOW:
|
|
- or go back to the newest paste.
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 | } |