View difference between Paste ID: XLpTcLnD and kKAHcMvc
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
}