Yandex.Webmaster APIを使用する

サイトに対するYandexの態度の変化を監視する人は誰でもYandex.Webmasterのような便利なYandexサービスについて知っていますが、APIとのやり取りを通じてこのプロセスを自動化する機会があることを知っている人は多くありません。



なぜなら 私はサイトの開発とその後のプロモーションに関与しており、プロモーションされたサイトはかなりあります。すぐにYandex.Webmasterから統計を取得するプロセスを自動化する機会をつかみました。

まず、データを取得するのを忘れた場合や、毎日、1時間ごと、またはそれ以上の頻度でデータを取得する時間がなかった場合でも、すべてのデータを取得します。

次に、APIを使用して、独自のデータ表示インターフェイスを作成し、自分にとって使いやすくします。



Yandex上のこのAPIのドキュメントは存在し、例さえ提供されていますが、私は個人的に何が起こっているのかを「図で表す」ことができませんでした。 したがって、このトピックにも興味がある場合は、猫をお願いします。



Yandexに登録して、Yandex.Webmaster APIの知り合いを始めましょう。 すでに承認されている場合、「アプリケーション」を登録できます。 将来、監視するサイトを持つユーザーのトークンを受信するために必要になります。 ここで新しいアプリケーションを登録します



登録について少し。







2番目の項目をチェックしなかった場合、アプリケーションは登録され、使用する準備ができています。

アプリケーションのリストはこちらから入手できます

作成されたばかりの場所に入ると、必要な「アプリケーションID」と「アプリケーションパスワード」を取得します。



リンクにすぐにアクセスすることにした場合、つまり 2番目の点に留意して、次のことを行う必要があります。

こちらからこのドキュメントをダウンロード、印刷、記入、スキャンしてwebmaster-api@yandex-team.ruに送信してください。 私の申請は4〜5日後に緩和されました。



仕事に取り掛かる。



PHPで例を挙げます。 すべてが私のために働いています。



$client_id = "  Id "; $client_secret = "  "; //        ,        //        state,      ,    if (!isset($_GET["code"])) { Header("Location: https://oauth.yandex.ru/authorize?response_type=code&client_id=".$client_id); die(); } //    ""   ,      // $_Get["code"]      .     . //        ,     . $result=postKeys("https://oauth.yandex.ru/token", array( 'grant_type'=> 'authorization_code', //   'code'=> $_GET["code"], //    'client_id'=>$client_id, 'client_secret'=>$client_secret ), array('Content-type: application/x-www-form-urlencoded') ); //    function postKeys($url,$peremen,$headers) { $post_arr=array(); foreach ($peremen as $key=>$value) { $post_arr[]=$key."=".$value; } $data=implode('&',$post_arr); $handle=curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_HTTPHEADER, $headers); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); $response=curl_exec($handle); $code=curl_getinfo($handle, CURLINFO_HTTP_CODE); return array("code"=>$code,"response"=>$response); } //   ,    200,    ,      if ($result["code"]==200) { $result["response"]=json_decode($result["response"],true); $token=$result["response"]["access_token"]; echo $token; }else{ echo "- ! : ".$result["code"]; } //     ,   , ,        ,  
      
      







トークンがあります。 これで、サイトのステータスに関する情報を取得できます。

これは、以前の情報にアクセスできなかったかのように、いくつかの段階で示します。



 $token="  "; // ,   function get_stat($url,$headers) { $handle=curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_HTTPHEADER, $headers); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); $response=curl_exec($handle); $code=curl_getinfo($handle, CURLINFO_HTTP_CODE); return array("code"=>$code,"response"=>$response); } //   ,       $result["code"] //   -  id   . //       https://webmaster.yandex.ru/api/123456789, 123456789 - id  //      ,   id   $result=get_stat('https://webmaster.yandex.ru/api/me',array('Authorization: OAuth '.$token)); $user_id=str_replace('https://webmaster.yandex.ru/api/','',$result["response"]); //      ,          . //   : href="https://webmaster.yandex.ru/api/123456789/hosts, 123456789 - id  //     ,     $result=get_stat('https://webmaster.yandex.ru/api/'.$user_id.'/hosts',array('Authorization: OAuth '.$token)); $xml=new SimpleXMLElement($result["response"]); $hosts_xml=$xml->xpath("host"); $hosts=array(); foreach($hosts_xml as $host) { $hosts[(string)$host->name]= array( "name"=>(string)$host->name, "verification_state"=>(string)$host->verification->attributes()->state, "crawling_state"=>(string)$host->crawling->attributes()->state, "virused"=>(string)$host->virused, "last-access"=>(string)$host->{'last-access'}, "tcy"=>(string)$host->tcy, "url-count"=>(string)$host->{'url-count'}, "index-count"=>(string)$host->{'index-count'}, "href"=>(string)$host->attributes()->href ); } unset($hosts_xml); unset($xml); /*                       ,     Array ( [domen] => Array ( [name] => domen -   [verification_state] => VERIFIED -       [crawling_state] => INDEXED -   [virused] => false -      [last-access] => 2012-11-06T22:54:10 -      [tcy] => 150 -  [url-count] => 7458 -    [index-count] => 6131 -     [href] => https://webmaster.yandex.ru/api/id /hosts/id  -       ) ) */ //       //    xml,    ,   ,     ,     $site_href="https://webmaster.yandex.ru/api/654321/hosts/123456"; // 654321 - user_id, 123456 - site_id $result=get_stat($site_href."/stats",array('Authorization: OAuth '.$token)); $xml=new SimpleXMLElement($result["response"]); $errors=(string)$xml->{'url-errors'}; //     $internal-links=(string)$xml->{'internal-links-count'}; //    $links=(string)$xml->{'links-count'}; //     unset($xml);
      
      







また、URLを受け取ることで、インデックス付きページと除外ページに関する情報を取得できますが、残念ながら、データは「過去1週間」のみに与えられます。これは、データの欠如と言えます。

リクエストによりこのデータを取得できます:



 $result=curlGet($site_href."/indexed",array('Authorization: OAuth '.$token)); /*  : <host> <index-count>238</index-count> <last-week-index-urls> <url>http://example.com/page1.html</url> <url>http://example.com/page2.html</url> </last-week-index-urls> </host> */ $result=curlGet($site_href."/excluded",array('Authorization: OAuth '.$token)); /*  : <host> <url-errors count="12"> <url-errors-with-code code=”404”> <count>12</count> <severity>ERROR</severity> </url-errors-with-code> </url-errors> </host>*/
      
      





こちらでステータスとエラー復号化をご覧ください



サイトへの外部リンクを介してデータを受信することもできますが、「週ごと」の期間中も可能な限り利用可能です。



 $result=curlGet($site_href."/links",array('Authorization: OAuth '.$token)); /*  : <host> <links-count>1436</links-count> <last-week-links> <url>http://example1.com/page1.html</url> <url>http://example2.com/page2.html</url> </last-week-links> </host>*/
      
      







また、Yandexは「一般的なクエリに関する」データも提供しますが、実際には、実際の位置と位置との間に矛盾があり、データが古くなっていることがよくあります。 それで、私はそれについてさえ気にしませんでした。



私が行う最も重要なことは、12時間ごとにすべてのサイトの統計を収集することです。 すべてのデータはデータベースに保存されるため、現在の状況を確認できるだけでなく、変更を分析することもできます。



それでも、サイト上のすべてのデータを毎回受信しないようにするには、それらのデータへのリンクをデータベースに保存することをお勧めします。 $ site_urlを意味します。 APIで突然何かが変更された場合は、これらのリンクをいつでも更新できます。



この情報がお役に立てば幸いです!

作業を自動化します。 赤テープで忙​​しくなればなるほど、創造性のための時間が増えます。 そして、私たちの愛する人たち!



All Articles