隅田川沿いを歩きつつ

歩きながら考えたことや感じたこと

SEOで最低限やろうと思ってること

このブログは学んだことを残しておくために書いてます。

残しておきたいと思ったり、頭の中を整理するために、自由に書いています。

なので、コンテンツマーケティング的にたくさんの読んでもらうために記事を書くことはないです。

とは言っても、読んでもらえれば嬉しい。。

だから、自由に書いてそれを読んでもらうために、可能な限りSEO対策したいと思っています。

SEO対策は何をするか?

何をするか?

私は、基本の基本だけやろうと思います。

  • 定期的に(頻繁に)記事書く
  • 内部リンクをつける(記事同士を関連付ける)
  • リライトして読みやすくする
  • アクセス数が多いランディングページを充実させる

今思いつくのはこれくらいです。

Googleが掲げる10の事実

あと何ができそうか?

Googleが掲げる10の事実」をみてみます。

about.google

以下のようなことを意識していたほうがいいですかね

  • ターゲティング(顧客は誰か?)
  • テーマを絞る
  • 新しい情報を取り入れ続ける
  • 正直に書く(嘘をつかない)

今後、SEO対策を勉強して、やれることを増やしていきたいと思います。

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を使ってみる

f:id:chapone:20220407235541p:plain

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 がいろいろあって迷いました。

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

f:id:chapone:20220407234928p:plain

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を取得する

f:id:chapone:20220403222752p:plain

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」にデータがありそうです。

f:id:chapone:20220403221300p:plain

「tracks」を見てみます。

tracks=playlist_data['tracks']

Pandasで確認します。

f:id:chapone:20220403221725p:plain

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

items=tracks['items']

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

f:id:chapone:20220403222320p:plain

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

このデータから曲の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

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