隅歩つ

書いて理解を深める

Search ConsoleのAPIを使ってみる

Google Analytics API に続き、Search Console API にも挑戦してみました。

Search Console API は情報が少なかったり、公式のサンプルが動かせなかったりして苦労しました。

参考ページ

いろんなページで参考にできそうなコードを探したのですが、どれも似ていました。

今回は、こちらのページのコードを参考にさせていただきました。

inasala.com

コードはこちら

jupyter notebook(VSCode 版)で実行したので、その流れで書きます。

まず、pandasと必須のライブラリをインポートします。

import pandas as pd
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

Google Cloud Platformでダウンロードしたkeyのjsonと自分のURL(今回はこのブログ)を設定します。

scope = ['https://www.googleapis.com/auth/webmasters.readonly']
key_file_location = 'client_secrets.json'
url = 'https://yuuuha.hatenablog.com/'

上で読み込んだ情報を読み込みます。

credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scope)
webmasters = build('webmasters', 'v3', credentials=credentials)

期間を設定します。

dimensions_list = ['query', 'page']
start_date = '2022-03-17'
end_date = '2022-04-13'
row_limit = 50

上で読み込んだものを設定します。

request = {
    'startDate': start_date,
    'endDate': end_date,
    'dimensions': dimensions_list,
    'rowLimit': row_limit
}
response = webmasters.searchanalytics().query(siteUrl=url, body=request).execute()

DataFrameに読み込みます。

df = pd.json_normalize(response['rows'])
for i, dimension in enumerate(dimensions_list):
    df[dimension] = df['keys'].apply(lambda row: row[i])
df = df.drop(columns='keys')

最後に表示させます。

df

まだ数字が少ないので、分析できないです。。

コードの内容はあまり理解できていないので、ちょっとずつ理解していきたいと思います。

yuuuha.hatenablog.com

BlenderのPython APIでマテリアル設定

BlenderPython API(以下、bpy)が理解が難しいです。

なかなかしっくりきませんが、あきらめずにがんばってます。

今回はマテリアルを設定してみます。

自力でドキュメントで理解とかは無理なので、この本で勉強しています。

BlenderユーザーのためのPython入門

BlenderユーザーのためのPython入門

  • 作者:大西 武
  • シーアンドアール研究所
Amazon

マテリアル設定の最初

デフォルトのcubeに色を付けます。

コードの全体像はこちら↓

import bpy

for m in bpy.data.materials:
    color = (0, 1, 1, 1)
    m.use_nodes = True
    bsdf = m.node_tree.nodes["Principled BSDF"]
    bsdf.inputs[0].default_value = color
    bsdf.inputs[4].default_value = 1
    bsdf.inputs[7].default_value = 0.5
    m.diffuse_color = color

まず、色を設定します。

RGBで設定します。
今回は、GとBと透明度を100%にしました。

color = (0, 1, 1, 1)

ノードを使うようにセットします。

m.use_nodes = True

「プリンシプルBSDF」をセットします。

bsdf = m.node_tree.nodes["Principled BSDF"]

色、メタリック、ラフネスを設定します。

bsdf.inputs[0].default_value = color
bsdf.inputs[4].default_value = 1
bsdf.inputs[7].default_value = 0.5

最後にディフューズをセットします。

m.diffuse_color = color

docs.blender.org

これをScriptingで実行すると以下のようになります。

docs.blender.org

https://yuuuha.hatenablog.com/entry/bpy_primitiveyuuuha.hatenablog.com

note.com

Google AnalyticsのAPIを使ってみる

Python の Pandas の勉強をする時、書籍などについているサンプルデータを使うことが多いのですが、自分にとって身近なデータを使う方が楽しいだろうな、とよく思う。

自分のブログのアクセスデータだったら、思い入れもあるから数字の 1 つに 1 つにいろいろ感じることがあるんじゃないかと思い、Google Analytics のデータを使うことにしました。

Google Analytics のデータは API を使ってみることにしました。
API を使ってみたかったのもあるので一石二鳥です。

参考にしたもの

参考にしたのは Google アナリティクス公式です。

はじめてのアナリティクス Reporting API v4: サービス アカウント向け Python クイックスタート

developers.google.com

v4 ってあるから GA4 対応と思っていたけど関係ないらしい、、、ややこしい。。

ちょうどこの Python クイックスタートを使った記事もありました。

こちらも参考にさせていただきました。

reffect.co.jp

Google アナリティクス API の種類

Google アナリティクスの API はいろんな種類があるようです。

調べたら API がいろいろあって迷いました。

学習ページに全体像の図がありました。

developers.google.com

Repoting API は Reporting の Core Repoting API のようです。

必要な手順

  • Reporting API の有効化
  • 認証情報
  • サービスアカウント
  • json (client_secrets.json)
  • Google Analytics4 のビューにユーザー追加
  • pip でインストール(pip install --upgrade google-api-python-client)

サンプルコード

クイックスタートにある以下のサンプルコードを実行します。

developers.google.com

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = 'client_secrets.json'
VIEW_ID = 'アナリティクス設定画面のビューIDを入れる'


def initialize_analyticsreporting():
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        KEY_FILE_LOCATION, SCOPES)

    analytics = build('analyticsreporting', 'v4', credentials=credentials)

    return analytics


def get_report(analytics):
    return analytics.reports().batchGet(
        body={
            'reportRequests': [
                {
                    'viewId': VIEW_ID,
                    'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
                    'metrics': [{'expression': 'ga:sessions'}],
                    'dimensions': [{'name': 'ga:country'}]
                }]
        }
    ).execute()


def print_response(response):
    for report in response.get('reports', []):
        columnHeader = report.get('columnHeader', {})
        dimensionHeaders = columnHeader.get('dimensions', [])
        metricHeaders = columnHeader.get(
            'metricHeader', {}).get('metricHeaderEntries', [])

        for row in report.get('data', {}).get('rows', []):
            dimensions = row.get('dimensions', [])
            dateRangeValues = row.get('metrics', [])

            for header, dimension in zip(dimensionHeaders, dimensions):
                print(header + ': ' + dimension)

            for i, values in enumerate(dateRangeValues):
                print('Date range: ' + str(i))
                for metricHeader, value in zip(metricHeaders, values.get('values')):
                    print(metricHeader.get('name') + ': ' + value)


def main():
    analytics = initialize_analyticsreporting()
    response = get_report(analytics)
    print_response(response)


if __name__ == '__main__':
    main()

これを実行すると、以下のようになります。

ga:country: Japan
Date range: 0
ga:sessions: 9

1週間のセッション合計とアクセスがきた国がわかります。

セッション数が少ないので、まだ分析できそうにありません。。。

Spotifyプレイリストの曲のIDを取得する

Spotifyのプレイリストを分析したいと思っています。

今回は、分析するために必要になる曲のIDを取得したいと思います。

Spotifyからspotipyを使ってプレイリスト内の曲のIDを取得する

まずは、コードの全体です。

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd

client_id='CLIENT_ID'
client_secret='CLIENT_SECRET'

client_id_and_secret = SpotifyClientCredentials(client_id, client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_id_and_secret)

user='USER_NAME'
playlist_id = '7qKwh074Msa1UMgsvsZeF1'

playlist_data = sp.user_playlist(user, playlist_id)
tracks = playlist_data['tracks']
items = tracks['items']

for i in range(len(items)):
    print('---------------')
    print(i)
    id = items[i]['track']['album']['id']
    print(id)

コードの説明

まず、Spotifyのライブラリである「spotipy」をインポートして、認証します。

読み込んだデータを確認する用のPandasもインポートします。

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd

次に、IDとSECRETを読み込んでSpotifyを認証します。

client_id='CLIENT_ID'
client_secret='CLIENT_SECRET'

client_id_and_secret=SpotifyClientCredentials(client_id,client_secret)
sp=spotipy.Spotify(client_credentials_manager=client_id_and_secret)

自分のUSER_NAMEとプレイリストIDを読み込みます。

user='USER_NAME'
playlist_id='7qKwh074Msa1UMgsvsZeF1'

そして、プレイリストデータを取得します。

playlist_data=sp.user_playlist(user,playlist_id)

このままだとわかりずらいので、PandasのDataFrameで表示してみます。

df=pd.DataFrame.from_dict([playlist_data])

「tracks」にデータがありそうです。

「tracks」を見てみます。

tracks=playlist_data['tracks']

Pandasで確認します。

「items」にデータがありそうです。

items=tracks['items']

「items」をPandasで見てみます。

やっと曲のデータを確認できました。

このデータから曲のIDを取り出します。

for i in range(len(items)):
    print('---------------')
    print(i)
    id=items[i]['track']['album']['id']
    print(id)

取り出せました。

---------------
0
7L3eq511jN3Avxa2W4KLzP
---------------
1
55xoykmEm4wOYczA7oWhHI
---------------
2
4D39jrL55p5sgjoUmc1Cer
---------------
3
3iW7B6SbU5wPWX7qKl9Xpc
---------------
4
2A9Tx0DE0z8VHXea0XYnLb

次は、このデータを利用して、曲ごとの分析データを取得したいと思います。

SeleniumでWebサイトにアクセス

データ収集やリサーチをしたいと思っています。

最初の第一歩として、スクレイピングをやってみました。

Seleniumを使ってWebサイトにアクセスするまでを調べて実践してみました。

SeleniumでWebサイトにアクセスするまで

SeleniumでWebサイトにアクセスするまでの手順です。

今回の作業は、仮想環境で行いました。

yuuuha.hatenablog.com

Seleniumをインストール

まずは、Seleniumをインストールします。

pip install selenium

ChromeDriverのダウンロード

次に、ChomeDriverをダウンロードします。

chromedriver.chromium.org

ダウンロードするバージョンは、現在使っているChromeに合わせます。

ダウンロードしたexeファイルを作業するフォルダに入れる。
または、Pathを通します。

Seleniumをインポート

そして、WebDriverをインポートします。

from selenium import webdriver

CromeDriverを読み込む

変数browserにWebDriverを読み込みます。

browser=webdriver.Chrome()

Webページにアクセスする

Googleにアクセスします。

url='https://www.google.com/'
browser.get(url)

ブラウザが立ち上がり、Googleにアクセスできました。

ブラウザを閉じる

最後に、ブラウザを閉じます。

browser.quit()

参考

こちらのYoutube動画を参考にさせていただきました。


www.youtube.com