Eylül 2nd, 2019

Python ile Search Console API Bağlantısı

Search Console bir diğer adı ile Webmaster Tools, aslında arayüzden daha fazla data içeriyor. Arayüz’de 1000 satır alabilirken, Api ile bu sayı 5000’e çıkıyor. Bu avantajının yanı sıra Search Console API‘ye Python ile bağlanıp internet sitelerinizi farklı görselleştirmelerle inceleyebilir, kendi performans raporunuzu oluşturabilir, kendi sıralama takip aracınızı bile yapabilirsiniz. Google’ın sample’ları yeni başlayanlar için biraz karmaşık. Burada ki kod bütünü ile bağlantıyı sağlayıp, veri çekeceğiz ardından bir csv’ye kaydedeceğiz. Hadi başlayalım.

Önce Kütüphanelerimizi import ediyoruz. Bağlantının haricinde pandas kütüphanesini de ekledik ki, çıktıları kaydedebilelim.

import httplib2
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
import pandas as pd

Sonrasında Api Console’dan aldığımız Client ID ve Secret’ı kullanacağız. Bu değerleri girmeyi unutmayın. (Developers guide’da Enable the Search Console Api adımlarını uygulayarak client id ve secret oluşturabilirsiniz. https://developers.google.com/webmaster-tools/search-console-api-original/v3/quickstart/quickstart-python )

Unutmadan Client ID ve Secret’ı Service Account üzerinden almamız gerekiyor.

CLIENT_ID = "ENTER YOUR CLIENT ID"
CLIENT_SECRET = "ENTER YOUR SECRET"

Bu işlemin ardından Search Console API’ye bağlanıp built etmemiz gereken kodlar aşağıda. Tüm bunların hepsini tek sayfada vereceğim.

# Check https://developers.google.com/webmaster-tools/search-console-api-original/v3/ for all available scopes
OAUTH_SCOPE = 'https://www.googleapis.com/auth/webmasters.readonly'
# Redirect URI for installed apps
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
# Run through the OAuth flow and retrieve credentials
flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
print('Go to the following link in your browser: ' + authorize_url)
code = input('Enter verification code: ').strip()
credentials = flow.step2_exchange(code)
# Create an httplib2.Http object and authorize it with our credentials
http = httplib2.Http()
http = credentials.authorize(http)
webmasters_service = build('webmasters', 'v3', http=http)

Artık bağlantımız gerçekleşmiş oluyor. Bu alana kadar sadece Client ID ve Secret bilgilerini değiştirmeniz yeterli. Kod bloğunu çalıştırdığımız zaman output olarak size bir link verecek. Bu linki kopyalayıp arama barına yazıp gerekli izinleri vereceksiniz. Sonra çıkan kodu ekrana yapıştırdığınız takdirde işin büyük kısmı bitti evet artık data alabiliriz.

Şimdi kendi Search Console’umuzda bulunan sitelerin listesini çekiyoruz.

site_list = webmasters_service.sites().list().execute()

Burada kodları anlatayım ( zaten buraya kadar ki kodları paylaştığım linkte görebilirsiniz. )

webmasters_service built ettiğimiz servisin adı. Yani bu parametre ile bağlantıyı sağlıyoruz. Devamında göreceğiniz üzere ;

sites().list() >>> site’lerimizin listesini alıyoruz ve en sonunda kodun çalışması için execute ediyoruz. Google Api Explorer üzerinden başka hangi parametreleri kullanabiliriz göz atabilirsiniz. https://developers.google.com/apis-explorer/#p/webmasters/v3/

Bu listede de göreceğiniz üzere konsolumuzda bulunan bir internet sitesinden verilerini alabilmemiz için webmasters.searchanalytics.query methodunu kullanacağız.

Yani bizim kod bloğumuzda
webmasters >>> webmasters_service
searchanalytics >>> searchanalytics()
query >>> query()

olursa aslında istediğimizi yapmış oluyoruz. Query fonksiyonu iki tane parametre alıyor biri siteURL diğeri request dediğimiz body.

Yani bu kodu yazdığımızda bize seçtiğimiz site ve tarihlerden verileri vermesi gerekiyor. Ama bu kodun üstüne bir ekleme yapmamız gerekiyor.

query = webmasters_service.searchanalytics().query(siteUrl=site, body=request).execute()

Konsolunuzda bir veya birden çok site olabilir. bu sebeple siteURL’yi belirtmemiz gerekiyor. Yani

site = "https://peakment.com/"

Bu siteden hangi verileri, hangi zaman aralıklarında istiyoruz ? Bunu da request’e yazacağız. Yani

request = { 'startDate': '2019-08-01', 'endDate': '2019-08-02', 'dimensions': ['query'], 'rowLimit': 30 }

Bu iki kod parçasını az önce verdiğim kodun üstüne yazdığımızda son durum şöyle oluyor.

site = "https://peakment.com/"
request = { 'startDate': '2019-08-01', 'endDate': '2019-08-01', 'dimensions': ['query'], 'rowLimit': 30 }
query = webmasters_service.searchanalytics().query(siteUrl=site, body=request).execute()

Tabi peakment’e bağlanmaya çalışırsanız hata alırsınız 🙂 site adresinizi, veri almak istediğiniz tarihi, satır sayısını seçebiliyorsunuz. Ayrıca dimensions kısmında, sorgu, sayfa, ülke gibi boyutlar seçebilirsiniz. Bu örnekte sorguyu seçtik. Diğer yazılarımızda farklı boyutları seçerek görselleştirmeler yapacağız. Aslında veri çekme işlemimiz bitti. Ufak bir kod parçası ile bu verileri pandas ile dataframe’e çevirip, csv olarak kaydettirelim.

console_data= pd.DataFrame(query['rows'])
console_data.to_csv(r'results.csv')

Bağlantımız tamam, veri çekme tamam, kaydetme tamam 🙂 Aşağıda tüm kodları bütün halinde bulabilirsiniz. Anaconda üzerinde bulunan Spyder veya farklı bir ide ile çalışmalara başlayabilirsiniz. “ENTER …. diye başlayan yerlere kendi değerlerinizi girmeyi unutmayın.

import httplib2
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
import pandas as pd
# Copy your credentials from the console
CLIENT_ID = "ENTER YOUR CLIENT ID"
CLIENT_SECRET = "ENTER YOUR SECRET"
OAUTH_SCOPE = 'https://www.googleapis.com/auth/webmasters.readonly'
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
# Run through the OAuth flow and retrieve credentials
flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
print('Go to the following link in your browser: ' + authorize_url)
code = input('Enter verification code: ').strip()
credentials = flow.step2_exchange(code)
# Create an httplib2.Http object and authorize it with our credentials
http = httplib2.Http()
http = credentials.authorize(http)
webmasters_service = build('webmasters', 'v3', http=http)
# Retrieve list of properties in account
site_list = webmasters_service.sites().list().execute()
# Filter for verified websites
verified_sites_urls = [s['siteUrl'] for s in site_list['siteEntry'] if s['permissionLevel'] != 'siteUnverifiedUser' and s['siteUrl'][:4] == 'http']
site = "ENTER YOUR WEBSITE WITH HTTPS"
request = { 'startDate': 'ENTER YOUR START DATE', 'endDate': 'ENTER YOUR END DATE', 'dimensions': ['query'], 'rowLimit': 30 }
query = webmasters_service.searchanalytics().query(siteUrl=site, body=request).execute()
console_data = pd.DataFrame(query['rows'])
console_data.to_csv(r'results.csv')
İlginizi Çekebilir