stovecbr / scraping-work

0 stars 0 forks source link

【PBI】GAS(Google Apps Script) と Python について調べる #3

Open stovecbr opened 3 weeks ago

stovecbr commented 3 weeks ago

2024/06/10のメモ

この方法では、Pythonを使用してWebスクレイピングとデータ整形を行い、GASを使用してデータをGoogle Sheetsに書き込みます。以下の手順に従って進めます。

ステップ1: Pythonスクリプトでデータを収集および整形

まず、Pythonスクリプトを使用してデータを収集し、整形します。例として、Seleniumを使用してココナラのデータを収集する方法を示します。

必要なライブラリのインストール
pip install selenium pandas
Pythonスクリプトの作成

以下は、Seleniumを使用してデータを収集し、整形するPythonスクリプトの例です。

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('coconala_titles.csv', index=False)

ステップ2: GASスクリプトの作成

次に、Google Apps Script (GAS)を使用して、データをGoogle Sheetsに書き込むためのスクリプトを作成します。

GASスクリプトの作成
  1. Google Sheetsを開きます。
  2. 「拡張機能」→「Apps Script」を選択します。
  3. 以下のGASスクリプトを貼り付けます。
function doPost(e) {
  var data = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.openById('your_spreadsheet_id').getSheetByName('Sheet1');
  sheet.clear(); // 必要に応じてシートをクリア

  var headers = Object.keys(data[0]);
  sheet.appendRow(headers);

  data.forEach(function(row) {
    var rowData = headers.map(function(header) {
      return row[header];
    });
    sheet.appendRow(rowData);
  });

  return ContentService.createTextOutput('Success');
}
  1. スクリプトを保存して、プロジェクト名を付けます。
  2. 「公開」→「ウェブアプリケーションとして導入」を選択します。
  3. 「プロジェクトバージョンを新規作成」として、アクセス権を「全員(匿名含む)」に設定し、デプロイします。
  4. デプロイ後に表示されるウェブアプリのURLを控えます。

ステップ3: PythonスクリプトからGASウェブアプリにデータを送信

最後に、Pythonスクリプトを使用して収集したデータをGASウェブアプリに送信します。

必要なライブラリのインストール
pip install requests
Pythonスクリプトの更新

以下のPythonスクリプトを使用して、データをGASウェブアプリに送信します。

import requests
import pandas as pd

# 例として、CSVファイルからデータを読み込む
df = pd.read_csv('coconala_titles.csv')

# DataFrameをJSON形式に変換
json_data = df.to_json(orient='records')

# GASウェブアプリのURL
url = 'https://script.google.com/macros/s/your_deployed_webapp_url/exec'

# POSTリクエストを送信
response = requests.post(url, data=json_data, headers={'Content-Type': 'application/json'})

if response.status_code == 200:
    print("Data successfully sent to Google Sheets")
else:
    print(f"Failed to send data to Google Sheets: {response.text}")

まとめ

  1. PythonスクリプトでSeleniumを使用してココナラのデータを収集し、データを整形します。
  2. GASスクリプトを作成し、デプロイしてGoogle Sheetsにデータを書き込むウェブアプリを構築します。
  3. Pythonスクリプトで整形したデータをGASウェブアプリにPOSTリクエストで送信し、Google Sheetsにデータを書き込みます。

この方法により、顧客のGoogleアカウント情報を開発者が知らなくても、安全かつ効率的にデータの収集とGoogle Sheetsへの書き込みが可能となります。

stovecbr commented 3 weeks ago

2024/06/10のメモ②

はい、PythonとGoogle Apps Script (GAS)を使用してココナラのデータを収集し、Google Sheetsに書き込む方法をGitHubに公開することができます。以下の手順に従って、必要なスクリプトをGitHubリポジトリに公開します。

手順1: GitHubリポジトリの作成

  1. GitHubアカウントにログインします。
  2. 新しいリポジトリを作成します。リポジトリ名、説明、公開/非公開の設定を行います。
  3. 「Create repository」ボタンをクリックしてリポジトリを作成します。

手順2: Pythonスクリプトの準備

PythonスクリプトをGitHubリポジトリに追加します。以下の構成例を使用します。

プロジェクト構成例

coconala-scraper/
│
├── README.md
├── requirements.txt
├── scraper.py
└── send_to_sheets.py

requirements.txt

selenium
pandas
requests

scraper.py

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('coconala_titles.csv', index=False)

send_to_sheets.py

import requests
import pandas as pd

# 例として、CSVファイルからデータを読み込む
df = pd.read_csv('coconala_titles.csv')

# DataFrameをJSON形式に変換
json_data = df.to_json(orient='records')

# GASウェブアプリのURL
url = 'https://script.google.com/macros/s/your_deployed_webapp_url/exec'

# POSTリクエストを送信
response = requests.post(url, data=json_data, headers={'Content-Type': 'application/json'})

if response.status_code == 200:
    print("Data successfully sent to Google Sheets")
else:
    print(f"Failed to send data to Google Sheets: {response.text}")

README.md

# Coconala Scraper

This project scrapes data from Coconala and uploads it to a Google Sheets document using Google Apps Script.

## Requirements

- Python 3.x
- Selenium
- Pandas
- Requests

## Setup

1. Clone the repository:
    ```sh
    git clone https://github.com/yourusername/coconala-scraper.git
    cd coconala-scraper
  1. Install the dependencies:

    pip install -r requirements.txt
  2. Update scraper.py with the correct path to your ChromeDriver and the correct XPaths.

  3. Update send_to_sheets.py with your deployed Google Apps Script URL.

Usage

  1. Run the scraper to collect data:

    python scraper.py
  2. Send the collected data to Google Sheets:

    python send_to_sheets.py

手順3: Google Apps Scriptの準備

GASスクリプトをGoogle Apps Scriptエディタに追加し、デプロイする手順をREADMEに記載します。

GASスクリプトの例

function doPost(e) {
  var data = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.openById('your_spreadsheet_id').getSheetByName('Sheet1');
  sheet.clear(); // 必要に応じてシートをクリア

  var headers = Object.keys(data[0]);
  sheet.appendRow(headers);

  data.forEach(function(row) {
    var rowData = headers.map(function(header) {
      return row[header];
    });
    sheet.appendRow(rowData);
  });

  return ContentService.createTextOutput('Success');
}

README.mdにGASの設定方法を追加

## Google Apps Script Setup

1. Open Google Sheets and navigate to Extensions > Apps Script.
2. Paste the following script into the script editor:
    ```javascript
    // (Paste the provided GAS script here)
  1. Save the script and deploy it as a web app:
    • Select 'Deploy' > 'New deployment'.
    • Select 'Web app' and set 'Who has access' to 'Anyone'.
    • Deploy the app and copy the URL.
  2. Update the send_to_sheets.py script with your deployed web app URL.

手順4: リポジトリへのプッシュ

  1. 作成したすべてのファイルをリポジトリに追加します。
  2. コミットしてGitHubにプッシュします。
git add .
git commit -m "Initial commit"
git push origin main

これで、PythonとGASを使用してココナラのデータを収集し、Google Sheetsに書き込む方法をGitHubに公開できます。顧客はREADMEの指示に従って設定を行い、スクリプトを実行することができます。顧客のアカウント情報を知らなくても、スクリプトの実行が可能です。

stovecbr commented 3 weeks ago

2024/06/10のメモ③

はい、Pythonだけでデータを収集し、整形し、Google Sheetsに書き込むことができます。以下の手順では、Pythonを使ってWebスクレイピングを行い、Google Sheets APIを使用して収集したデータをGoogle Sheetsに書き込みます。

必要なライブラリのインストール

まず、必要なライブラリをインストールします。以下のコマンドを実行してください。

pip install selenium pandas google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client

ステップ1: Google Sheets APIの設定

  1. Google Cloud Consoleにアクセスし、新しいプロジェクトを作成します。
  2. APIとサービス > ライブラリに移動し、Google Sheets APIを有効にします。
  3. APIとサービス > 認証情報に移動し、「認証情報を作成」からOAuth 2.0クライアントIDを作成します。
  4. OAuth 2.0クライアントIDを作成する際、「その他」を選択し、JSONファイルをダウンロードします。このファイルをプロジェクトフォルダに保存し、名前をcredentials.jsonに変更します。

ステップ2: Pythonスクリプトの作成

scraper.py

以下のスクリプトは、Seleniumを使用してココナラのデータを収集し、データフレームに整形します。

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('coconala_titles.csv', index=False)

send_to_sheets.py

次に、Google Sheets APIを使用して、データをGoogle Sheetsに書き込むスクリプトを作成します。

import pandas as pd
import os.path
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google Sheets APIの設定
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'credentials.json'

creds = None
creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 使用するスプレッドシートのIDと範囲を設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# データをCSVファイルから読み込む
df = pd.read_csv('coconala_titles.csv')

# データをリストに変換
values = [df.columns.values.tolist()] + df.values.tolist()

# データをGoogle Sheetsに書き込む
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

ステップ3: 実行方法

  1. スクレイピングを実行:
python scraper.py
  1. Google Sheetsにデータを書き込む:
python send_to_sheets.py

まとめ

  1. Pythonスクリプト (scraper.py) を使用して、ココナラからデータを収集し、CSVファイルに保存します。
  2. Google Sheets APIを使用して、収集したデータをGoogle Sheetsに書き込みます (send_to_sheets.py)。

この方法により、Pythonのみでデータの収集とGoogle Sheetsへの書き込みを行うことができ、外部サービスの設定が不要になります。また、顧客のGoogleアカウント情報を開発者が知る必要もありません。

stovecbr commented 3 weeks ago

2024/06/10のメモ④

PythonだけでWebスクレイピングとGoogle Sheetsへのデータ書き込みを行う場合、顧客に提供する方法としては、スクリプトと設定方法をパッケージ化して提供するのが一般的です。以下の手順に従って、顧客が簡単に使えるようにセットアップガイドとスクリプトを準備します。

1. GitHubリポジトリの作成

顧客が簡単にアクセスできるように、スクリプトとドキュメントをGitHubリポジトリに公開します。

2. 必要なファイルの準備

以下のファイルを準備します。

README.md

# Coconala Data Scraper

This project scrapes data from Coconala and uploads it to a Google Sheets document using Python.

## Requirements

- Python 3.x
- Selenium
- Pandas
- Google API Client

## Setup

1. Clone the repository:
    ```sh
    git clone https://github.com/yourusername/coconala-scraper.git
    cd coconala-scraper
  1. Install the dependencies:

    pip install -r requirements.txt
  2. Download your credentials.json file from Google Cloud Console and place it in the project directory.

  3. Update scraper.py with the correct path to your ChromeDriver and the correct XPaths.

  4. Update send_to_sheets.py with your Google Sheets ID.

Usage

  1. Run the scraper to collect data:

    python scraper.py
  2. Send the collected data to Google Sheets:

    python send_to_sheets.py

Google Sheets API Setup

  1. Go to the Google Cloud Console.
  2. Create a new project.
  3. Enable the Google Sheets API.
  4. Create credentials for a Service Account and download the JSON file.
  5. Share your Google Sheets document with the service account email found in the JSON file.

requirements.txt

selenium
pandas
google-auth
google-auth-oauthlib
google-auth-httplib2
google-api-python-client

scraper.py

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('coconala_titles.csv', index=False)

send_to_sheets.py

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google Sheets APIの設定
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'credentials.json'

creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 使用するスプレッドシートのIDと範囲を設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# データをCSVファイルから読み込む
df = pd.read_csv('coconala_titles.csv')

# データをリストに変換
values = [df.columns.values.tolist()] + df.values.tolist()

# データをGoogle Sheetsに書き込む
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

3. 顧客への提供

  1. GitHubリポジトリ: 上記のファイルを含むリポジトリを作成し、顧客にリポジトリのURLを提供します。
  2. セットアップガイド: README.mdに従ってセットアップと使用方法を説明します。
  3. サポート: 必要に応じて、セットアップや実行に関するサポートを提供します。

まとめ

これにより、顧客は自身のGoogleアカウント情報を開発者に提供せずに、安全かつ効率的にデータの収集とGoogle Sheetsへの書き込みが可能となります。

stovecbr commented 3 weeks ago

2024/06/10のメモ⑤

顧客がコーディングに慣れていない場合でも、Pythonを使用してデータ収集とGoogle Sheetsへの書き込みを簡単に行えるようにするための手順を以下に示します。

ユーザーフレンドリーなスクリプトの提供

顧客がコーディングに慣れていない場合、スクリプトを実行するための明確な手順と必要なツールを提供することが重要です。以下のステップで、顧客が簡単にセットアップと実行を行えるようにします。

1. 実行ファイルの提供

Pythonスクリプトを実行ファイル(例えば、Windowsなら.exeファイル)としてパッケージ化することで、顧客はPythonのインストールや環境設定を気にせずに実行できます。PyInstallerというツールを使って、Pythonスクリプトを実行ファイルに変換できます。

pip install pyinstaller

次に、scraper.pysend_to_sheets.pyを実行ファイルに変換します。

pyinstaller --onefile scraper.py
pyinstaller --onefile send_to_sheets.py

これにより、dist/フォルダにscraper.exesend_to_sheets.exeが生成されます。これらを顧客に提供します。

2. 簡単なインストールガイド

以下のような簡単なインストールガイドを提供します。

# Coconala Data Scraper

## はじめに

このガイドでは、ココナラのデータを収集し、Google Sheetsにアップロードする手順を説明します。

## 前提条件

- Windows PC
- Google Sheetsのアカウント

## 手順

1. **ファイルのダウンロード**:
   - `scraper.exe`と`sheets_uploader.exe`をダウンロードします。
   - `credentials.json`ファイルをダウンロードし、同じフォルダに保存します。

2. **Google Sheetsの設定**:
   - [Google Cloud Console](https://console.cloud.google.com/)で新しいプロジェクトを作成します。
   - Google Sheets APIを有効にします。
   - サービスアカウントを作成し、認証情報をダウンロードして`credentials.json`として保存します。
   - Google Sheetsドキュメントを作成し、サービスアカウントのメールアドレスを共有します。

3. **データの収集**:
   - `scraper.exe`をダブルクリックして実行します。これにより、データが収集され、`coconala_titles.csv`として保存されます。

4. **Google Sheetsへのアップロード**:
   - `send_to_sheets.exe`をダブルクリックして実行します。これにより、データがGoogle Sheetsにアップロードされます。

## サポート

セットアップや実行に関する質問があれば、お気軽にお問い合わせください。

3. サポート動画の提供

ビデオチュートリアルを作成し、顧客に提供することで、手順がより明確になります。動画では、以下のステップを示します。

  1. 必要なファイルのダウンロード方法
  2. Google Sheets APIの設定方法
  3. 実行ファイルの実行方法
  4. データの確認方法

4. インストールパッケージの作成

顧客が一度に必要なファイルをすべてダウンロードできるように、インストールパッケージ(zipファイルなど)を作成し、提供します。このパッケージには、以下のファイルが含まれます。

まとめ

顧客がコーディングに慣れていない場合でも、以下の方法でスクリプトを簡単に使用できるようにします。

  1. 実行ファイルの提供: Pythonスクリプトを実行ファイルに変換し、提供します。
  2. 簡単なインストールガイド: 明確な手順を記載したインストールガイドを提供します。
  3. サポート動画の提供: 設定手順と実行方法を示すビデオチュートリアルを作成します。
  4. インストールパッケージの作成: 必要なファイルをまとめたインストールパッケージを提供します。

これにより、顧客はPythonやコーディングの知識がなくても、簡単にデータ収集とGoogle Sheetsへの書き込みを行えるようになります。

stovecbr commented 3 weeks ago

2024/06/10のメモ⑥

これまでの回答で触れたOAuthに関する内容は、主にGoogle Sheets APIを使用する際の認証に関するもので、ココナラのデータ収集には直接関係していません。以下にそれぞれの概要を整理します。

Google Sheets APIとOAuth

概要

使用例

以下のスクリプトは、Pythonを使用してGoogle Sheetsにデータを書き込む例です。

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google Sheets APIの設定
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'credentials.json'

creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 使用するスプレッドシートのIDと範囲を設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# データをCSVファイルから読み込む
df = pd.read_csv('coconala_titles.csv')

# データをリストに変換
values = [df.columns.values.tolist()] + df.values.tolist()

# データをGoogle Sheetsに書き込む
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

ココナラのデータ収集

概要

使用例

以下のスクリプトは、Seleniumを使用してココナラのページからデータを収集する例です。

from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
driver.quit()

print(titles)

顧客に提供する際の方法

顧客がコーディングに慣れていない場合、以下の方法で提供します。

実行ファイルの提供

簡単なインストールガイド

まとめ

このアプローチにより、顧客は自身のGoogleアカウント情報を開発者に提供することなく、データ収集とGoogle Sheetsへの書き込みを安全かつ効率的に行うことができます。

stovecbr commented 3 weeks ago

2024/06/10のメモ⑦

Pythonを使ってココナラのデータを収集し、Google Sheetsに書き込むスクリプトを顧客に提供する際のファイル構成を以下に示します。この構成は、顧客がスクリプトを簡単にセットアップして実行できるように設計されています。

ファイル構成

coconala_scraper/
├── README.md
├── requirements.txt
├── scraper.py
├── send_to_sheets.py
├── credentials.json (not included in the repository; provided by the customer)
├── dist/
│   ├── scraper.exe (generated by PyInstaller)
│   └── send_to_sheets.exe (generated by PyInstaller)
└── data/
    └── coconala_titles.csv (generated by scraper.py)

各ファイルの内容

README.md

インストール手順と使用方法を説明するガイドです。

# Coconala Data Scraper

## 概要

このプロジェクトは、ココナラのデータを収集し、Google Sheetsにアップロードするためのツールです。

## 前提条件

- Windows PC
- Google Sheetsアカウント
- ChromeDriver (バージョンはご使用のGoogle Chromeに合わせてください)

## セットアップ

### 1. ファイルのダウンロード

以下のファイルをダウンロードし、同じフォルダに保存します。

- `scraper.exe`
- `send_to_sheets.exe`
- `credentials.json` (Google Cloud Consoleから取得)

### 2. Google Sheets APIの設定

1. [Google Cloud Console](https://console.cloud.google.com/)で新しいプロジェクトを作成します。
2. Google Sheets APIを有効にします。
3. サービスアカウントを作成し、認証情報をダウンロードして`credentials.json`として保存します。
4. Google Sheetsドキュメントを作成し、サービスアカウントのメールアドレスを共有します。

### 3. データの収集

`scraper.exe`をダブルクリックして実行します。これにより、データが収集され、`data/coconala_titles.csv`として保存されます。

### 4. Google Sheetsへのアップロード

`send_to_sheets.exe`をダブルクリックして実行します。これにより、データがGoogle Sheetsにアップロードされます。

## サポート

セットアップや実行に関する質問があれば、お気軽にお問い合わせください。

requirements.txt

Pythonスクリプトの実行に必要なライブラリを記載します。

selenium
pandas
google-auth
google-auth-oauthlib
google-auth-httplib2
google-api-python-client

scraper.py

ココナラのデータを収集してCSVファイルに保存するスクリプトです。

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

# WebDriverの設定
driver = webdriver.Chrome(executable_path='./path/to/chromedriver')  # ChromeDriverのパスを設定

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('./data/coconala_titles.csv', index=False)

send_to_sheets.py

CSVファイルのデータをGoogle Sheetsに書き込むスクリプトです。

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google Sheets APIの設定
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'credentials.json'

creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 使用するスプレッドシートのIDと範囲を設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# データをCSVファイルから読み込む
df = pd.read_csv('./data/coconala_titles.csv')

# データをリストに変換
values = [df.columns.values.tolist()] + df.values.tolist()

# データをGoogle Sheetsに書き込む
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

credentials.json

Google Sheets APIの認証情報ファイル。顧客がGoogle Cloud Consoleから取得し、プロジェクトディレクトリに配置します。

実行ファイルの生成

PyInstallerを使用して、scraper.pysend_to_sheets.pyを実行ファイルに変換します。

pyinstaller --onefile scraper.py
pyinstaller --onefile send_to_sheets.py

これにより、dist/フォルダに実行ファイル(scraper.exesend_to_sheets.exe)が生成されます。これらを顧客に提供します。

顧客に提供する方法

  1. GitHubリポジトリ: 上記のファイル構成でリポジトリを作成し、顧客にURLを提供します。
  2. インストールパッケージ: 必要なファイルをまとめたZIPファイルを作成し、顧客に提供します。
  3. 実行手順: README.mdに記載された手順に従い、顧客がスムーズにセットアップできるようにサポートします。

これにより、顧客はPythonの知識がなくても、簡単にデータ収集とGoogle Sheetsへの書き込みを行えるようになります。

stovecbr commented 3 weeks ago

2024/06/10のメモ⑧

参考サイト

stovecbr commented 3 weeks ago

2024/06/11のメモ

Dockerコンテナを使用して、ココナラのデータを収集し、Google Sheetsに書き込む環境をセットアップする方法を説明します。以下に必要な手順を示します。

ステップ1: Dockerfileの作成

まず、プロジェクトディレクトリにDockerfileを作成します。このファイルには、Dockerイメージのビルド手順を記述します。

Dockerfile

# ベースイメージとしてPythonを使用
FROM python:3.9-slim

# 作業ディレクトリを設定
WORKDIR /app

# 必要なファイルをコピー
COPY requirements.txt requirements.txt
COPY scraper.py scraper.py
COPY send_to_sheets.py send_to_sheets.py
COPY credentials.json credentials.json

# ChromeDriverとGoogle Chromeのインストール
RUN apt-get update && \
    apt-get install -y wget unzip && \
    wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
    apt-get update && \
    apt-get install -y google-chrome-stable && \
    wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)/chromedriver_linux64.zip && \
    unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ && \
    rm /tmp/chromedriver.zip && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Pythonパッケージのインストール
RUN pip install --no-cache-dir -r requirements.txt

# デフォルトのコマンドを設定
CMD ["python", "scraper.py"]

ステップ2: requirements.txtの作成

必要なPythonパッケージをリストアップします。

requirements.txt

selenium
pandas
google-auth
google-auth-oauthlib
google-auth-httplib2
google-api-python-client

ステップ3: Pythonスクリプトの準備

前述のscraper.pysend_to_sheets.pyを作成します。

scraper.py

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# Chromeの設定
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

# WebDriverの設定
service = Service('/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)

# ココナラのページにアクセス
driver.get('https://www.coconala.com/categories')

# データ収集の例
titles = []
for i in range(1, 11):  # 上から10個のアイテムを収集
    try:
        title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
        titles.append(title)
    except Exception as e:
        print(f"Error: {e}")
    time.sleep(1)

driver.quit()

# データフレームに整形
df = pd.DataFrame(titles, columns=['Title'])

# データをCSVファイルとして保存
df.to_csv('./data/coconala_titles.csv', index=False)

send_to_sheets.py

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# Google Sheets APIの設定
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'credentials.json'

creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 使用するスプレッドシートのIDと範囲を設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# データをCSVファイルから読み込む
df = pd.read_csv('./data/coconala_titles.csv')

# データをリストに変換
values = [df.columns.values.tolist()] + df.values.tolist()

# データをGoogle Sheetsに書き込む
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

ステップ4: Dockerイメージのビルド

プロジェクトディレクトリで次のコマンドを実行してDockerイメージをビルドします。

docker build -t coconala_scraper .

ステップ5: Dockerコンテナの実行

以下のコマンドを実行して、コンテナを起動し、データを収集します。

docker run --rm -v $(pwd)/data:/app/data coconala_scraper

これにより、収集したデータがdataディレクトリに保存されます。

次に、収集したデータをGoogle Sheetsにアップロードするために、以下のコマンドを実行します。

docker run --rm -v $(pwd)/data:/app/data coconala_scraper python send_to_sheets.py

まとめ

この手順を使用することで、顧客は簡単にココナラのデータを収集し、Google Sheetsにアップロードすることができます。Dockerを使用することで、環境の設定や依存関係の問題を最小限に抑えることができます。

stovecbr commented 3 weeks ago

2024/06/11のメモ②

以下のPythonスクリプトを実行すると、Pythonのインストール場所とバージョンを表示します:

stovecbr commented 3 weeks ago

2024/06/11のメモ③

stovecbr commented 3 weeks ago

2024年6月11日のメモ④

stovecbr commented 3 weeks ago

2024/06/11のメモ⑤

以下は、ココナラのデータを収集し、Google Sheetsに書き込むための環境をDockerコンテナでセットアップするためのファイル構成です。この構成には、Dockerfile、Pythonスクリプト、依存関係のリスト、および必要な認証情報ファイルが含まれます。

ファイル構成

coconala_scraper/
├── Dockerfile
├── requirements.txt
├── scraper.py
├── send_to_sheets.py
├── credentials.json
├── docker-compose.yml
└── data/
    └── coconala_titles.csv (generated by scraper.py)

各ファイルの内容

  1. Dockerfile: Dockerイメージをビルドするための指示を記述します。

    # Python 3.12-slimをベースにしたDockerイメージを使用します。
    FROM python:3.12-slim
    
    # Pythonがバッファリングを行わないように環境変数を設定します。
    ENV PYTHONUNBUFFERED=1
    
    # 必要なパッケージをインストール
    RUN apt-get update && apt-get install -y --no-install-recommends \
        wget \
        unzip \
        && rm -rf /var/lib/apt/lists/*
    
    # ChromeDriverとGoogle Chromeをインストールします。
    RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
        sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
        apt-get update && \
        apt-get install -y google-chrome-stable && \
        wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)/chromedriver_linux64.zip && \
        unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ && \
        rm /tmp/chromedriver.zip
    
    # pipをアップグレードし、必要なPythonパッケージをインストールします。
    COPY requirements.txt .
    RUN pip install --upgrade pip && pip install -r requirements.txt
    
    # 作業ディレクトリを設定します。
    WORKDIR /app
    
    # プロジェクトファイルをコピーします。
    COPY . .
    
    # デフォルトのコマンドを設定します。
    CMD ["python", "scraper.py"]
  2. requirements.txt: 必要なPythonパッケージのリストを記述します。

    selenium
    pandas
    google-auth
    google-auth-oauthlib
    google-auth-httplib2
    google-api-python-client
  3. scraper.py: ココナラのデータを収集するためのPythonスクリプト。

    import time
    import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    
    # Chromeの設定
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    
    # WebDriverの設定
    service = Service('/usr/local/bin/chromedriver')
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    # ココナラのページにアクセス
    driver.get('https://www.coconala.com/categories')
    
    # データ収集の例
    titles = []
    for i in range(1, 11):  # 上から10個のアイテムを収集
        try:
            title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
            titles.append(title)
        except Exception as e:
            print(f"Error: {e}")
        time.sleep(1)
    
    driver.quit()
    
    # データフレームに整形
    df = pd.DataFrame(titles, columns=['Title'])
    
    # データをCSVファイルとして保存
    df.to_csv('./data/coconala_titles.csv', index=False)
  4. send_to_sheets.py: 収集したデータをGoogle Sheetsに書き込むためのPythonスクリプト。

    import pandas as pd
    from google.oauth2 import service_account
    from googleapiclient.discovery import build
    
    # Google Sheets APIの設定
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
    SERVICE_ACCOUNT_FILE = 'credentials.json'
    
    creds = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    
    # 使用するスプレッドシートのIDと範囲を設定
    SPREADSHEET_ID = 'your_spreadsheet_id'
    RANGE_NAME = 'Sheet1!A1'
    
    # データをCSVファイルから読み込む
    df = pd.read_csv('./data/coconala_titles.csv')
    
    # データをリストに変換
    values = [df.columns.values.tolist()] + df.values.tolist()
    
    # データをGoogle Sheetsに書き込む
    service = build('sheets', 'v4', credentials=creds)
    sheet = service.spreadsheets()
    
    request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                    valueInputOption='RAW', body={'values': values})
    response = request.execute()
    
    print("Data successfully sent to Google Sheets")
  5. credentials.json: Google Sheets APIの認証情報ファイル。このファイルはGoogle Cloud Consoleで取得し、プロジェクトディレクトリに配置します。セキュリティ上、このファイルはGitリポジトリに含めないようにします。

  6. docker-compose.yml: Docker Composeファイル。複数のサービスを定義し、簡単に管理できるようにします。

    version: '3'
    services:
      scraper:
        build: .
        volumes:
          - ./data:/app/data
        environment:
          - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
        command: python scraper.py
      send_to_sheets:
        build: .
        volumes:
          - ./data:/app/data
        environment:
          - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
        command: python send_to_sheets.py

プロジェクトのセットアップと実行

  1. Dockerイメージのビルド:

    docker-compose build
  2. データ収集コンテナの実行:

    docker-compose run scraper
  3. データをGoogle Sheetsに送信するコンテナの実行:

    docker-compose run send_to_sheets

これらの手順を使用することで、顧客は簡単にココナラのデータを収集し、Google Sheetsにアップロードすることができます。Dockerを使用することで、環境の設定や依存関係の問題を最小限に抑えることができます。

stovecbr commented 3 weeks ago

2024/06/11のメモ⑥

はい、上記の回答は顧客に提供するための前提で構成されています。ただし、顧客がこのセットアップを実行する際に問題が発生しないように、いくつかの追加情報と手順を提供する必要があります。

以下は、顧客に提供するための完全なガイドです。

顧客に提供するセットアップガイド

ファイル構成

coconala_scraper/
├── Dockerfile
├── requirements.txt
├── scraper.py
├── send_to_sheets.py
├── credentials.json (provided by the customer)
├── docker-compose.yml
└── data/
    └── coconala_titles.csv (generated by scraper.py)

各ファイルの内容

  1. Dockerfile:

    FROM python:3.12-slim
    
    ENV PYTHONUNBUFFERED=1
    
    RUN apt-get update && apt-get install -y --no-install-recommends \
        wget \
        unzip \
        && rm -rf /var/lib/apt/lists/*
    
    RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
        sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
        apt-get update && \
        apt-get install -y google-chrome-stable && \
        wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)/chromedriver_linux64.zip && \
        unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ && \
        rm /tmp/chromedriver.zip
    
    COPY requirements.txt .
    RUN pip install --upgrade pip && pip install -r requirements.txt
    
    WORKDIR /app
    
    COPY . .
    
    CMD ["python", "scraper.py"]
  2. requirements.txt:

    selenium
    pandas
    google-auth
    google-auth-oauthlib
    google-auth-httplib2
    google-api-python-client
  3. scraper.py:

    import time
    import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    
    service = Service('/usr/local/bin/chromedriver')
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    driver.get('https://www.coconala.com/categories')
    
    titles = []
    for i in range(1, 11):
        try:
            title = driver.find_element(By.XPATH, f'//*[@id="some_xpath_pattern_{i}"]').text
            titles.append(title)
        except Exception as e:
            print(f"Error: {e}")
        time.sleep(1)
    
    driver.quit()
    
    df = pd.DataFrame(titles, columns=['Title'])
    
    df.to_csv('./data/coconala_titles.csv', index=False)
  4. send_to_sheets.py:

    import pandas as pd
    from google.oauth2 import service_account
    from googleapiclient.discovery import build
    
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
    SERVICE_ACCOUNT_FILE = 'credentials.json'
    
    creds = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    
    SPREADSHEET_ID = 'your_spreadsheet_id'
    RANGE_NAME = 'Sheet1!A1'
    
    df = pd.read_csv('./data/coconala_titles.csv')
    
    values = [df.columns.values.tolist()] + df.values.tolist()
    
    service = build('sheets', 'v4', credentials=creds)
    sheet = service.spreadsheets()
    
    request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                    valueInputOption='RAW', body={'values': values})
    response = request.execute()
    
    print("Data successfully sent to Google Sheets")
  5. credentials.json:

    • 顧客はGoogle Cloud Consoleでサービスアカウントを作成し、credentials.jsonを取得する必要があります。このファイルはcoconala_scraperディレクトリに配置します。
  6. docker-compose.yml:

    version: '3'
    services:
      scraper:
        build: .
        volumes:
          - ./data:/app/data
        environment:
          - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
        command: python scraper.py
      send_to_sheets:
        build: .
        volumes:
          - ./data:/app/data
        environment:
          - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
        command: python send_to_sheets.py

セットアップ手順

  1. DockerとDocker Composeのインストール:

    • DockerとDocker Composeをインストールします。
    • インストール手順は公式ドキュメントに従ってください(Dockerインストールガイド)。
  2. プロジェクトのクローンまたはダウンロード:

    • プロジェクトをクローンまたはダウンロードします。
    git clone <repository_url>
    cd coconala_scraper
  3. Google Cloud Platformのセットアップ:

    • サービスアカウントを作成し、credentials.jsonファイルを取得します。詳細な手順はこちらを参照してください。
    • credentials.jsonファイルをプロジェクトディレクトリに配置します。
  4. Dockerイメージのビルド:

    docker-compose build
  5. データ収集コンテナの実行:

    docker-compose run scraper
  6. データをGoogle Sheetsに送信するコンテナの実行:

    docker-compose run send_to_sheets

注意事項

このガイドに従うことで、顧客は簡単に環境をセットアップし、ココナラのデータを収集し、Google Sheetsに書き込むことができます。顧客がコーディングに慣れていない場合でも、DockerとDocker Composeを使用することで、必要なすべての依存関係が適切にインストールされ、環境が一貫してセットアップされるため、作業が容易になります。

stovecbr commented 3 weeks ago

2024/06/11のメモ⑦

顧客に提供する場合、特に顧客がコーディングに慣れていない場合には、exeファイルのような実行可能ファイルを提供することで、セットアップや実行の手順を簡略化することができます。ただし、PythonスクリプトとDockerを使用する方法でも十分に簡単に設定できる場合があります。

以下は、exeファイルを使用する場合と、Dockerを使用する場合のそれぞれの方法についての詳細な説明です。

方法1: exeファイルを提供する

1. PyInstallerを使用してexeファイルを作成

まず、Pythonスクリプトをexeファイルに変換するために、PyInstallerを使用します。

pip install pyinstaller

次に、scraper.pysend_to_sheets.pyの各スクリプトをexeファイルに変換します。

pyinstaller --onefile scraper.py
pyinstaller --onefile send_to_sheets.py

これにより、dist/ディレクトリに各スクリプトの実行可能ファイルが生成されます。これらのファイルを顧客に提供します。

2. Google Sheets APIの認証

顧客は、Google Cloud Consoleでサービスアカウントを作成し、credentials.jsonファイルを取得する必要があります。このファイルは、exeファイルと同じディレクトリに配置するように指示します。

3. 実行手順の提供

顧客には、以下の手順を提供します:

  1. 提供されたexeファイル(例:scraper.exesend_to_sheets.exe)を任意のディレクトリに配置します。
  2. Google Cloud Consoleから取得したcredentials.jsonを同じディレクトリに配置します。
  3. scraper.exeをダブルクリックして実行し、データを収集します。
  4. send_to_sheets.exeをダブルクリックして実行し、データをGoogle Sheetsに書き込みます。

方法2: Dockerを使用する

1. DockerとDocker Composeのインストール

顧客には、DockerとDocker Composeをインストールするように指示します。インストール手順は公式ドキュメントに従います。

2. プロジェクトのセットアップ

顧客には、プロジェクトのセットアップ方法を説明します。以下の手順を提供します:

  1. プロジェクトのクローンまたはダウンロード。

    git clone <repository_url>
    cd coconala_scraper
  2. Google Cloud Consoleでサービスアカウントを作成し、credentials.jsonを取得し、プロジェクトディレクトリに配置します。

  3. Dockerイメージのビルド。

    docker-compose build
  4. データ収集コンテナの実行。

    docker-compose run scraper
  5. データをGoogle Sheetsに送信するコンテナの実行。

    docker-compose run send_to_sheets

どちらの方法が適しているか

顧客の技術的な知識とニーズに応じて、どちらの方法を選択するか決定すると良いでしょう。Dockerを使用する方法は、将来的なメンテナンスや拡張が容易であるため、可能であればこちらを推奨します。

stovecbr commented 3 weeks ago

2024/06/11のメモ⑧

現在の docker-compose.yml を基に、提供するサービスをセットアップするためのファイルを更新する必要があります。以下は、必要な変更を含む新しい docker-compose.yml ファイルの例です。

更新後の docker-compose.yml

version: '3'
services:
  scraper:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - './data:/app/data'
      - './credentials.json:/app/credentials.json:ro'
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
    command: python scraper.py
    tty: true
    stdin_open: true

  send_to_sheets:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - './data:/app/data'
      - './credentials.json:/app/credentials.json:ro'
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
    command: python send_to_sheets.py
    tty: true
    stdin_open: true

説明

必要なファイル構成

coconala_scraper/
├── Dockerfile
├── requirements.txt
├── scraper.py
├── send_to_sheets.py
├── credentials.json (provided by the customer)
├── docker-compose.yml
└── data/
    └── coconala_titles.csv (generated by scraper.py)

各ファイルの内容

  1. Dockerfile: 上記の指示通りで問題ありません。
  2. requirements.txt: 上記の指示通りで問題ありません。
  3. scraper.py: 上記の指示通りで問題ありません。
  4. send_to_sheets.py: 上記の指示通りで問題ありません。
  5. credentials.json: 顧客から提供されるものです。
  6. docker-compose.yml: 更新した内容を使用します。

顧客へのセットアップ手順

  1. DockerとDocker Composeのインストール

    • DockerとDocker Composeをインストールします。
    • インストール手順は公式ドキュメントに従います(Dockerインストールガイド)。
  2. プロジェクトのクローンまたはダウンロード

    • プロジェクトをクローンまたはダウンロードします。
    git clone <repository_url>
    cd coconala_scraper
  3. Google Cloud Platformのセットアップ

    • サービスアカウントを作成し、credentials.jsonファイルを取得します。詳細な手順はこちらを参照してください。
    • credentials.jsonファイルをプロジェクトディレクトリに配置します。
  4. Dockerイメージのビルド

    docker-compose build
  5. データ収集コンテナの実行

    docker-compose run scraper
  6. データをGoogle Sheetsに送信するコンテナの実行

    docker-compose run send_to_sheets

この手順に従うことで、顧客は簡単にココナラのデータを収集し、Google Sheetsに書き込むことができます。Dockerを使用することで、環境の依存関係や設定を統一し、手順を簡略化することができます。

stovecbr commented 3 weeks ago

2024/06/11のメモ⑨

Google Sheets APIの設定にはいくつかのステップがあります。以下に詳細な手順を示します。これに従うことで、Google Sheets APIを使用してデータを読み書きするための認証情報を取得できます。

Google Sheets APIの設定手順

1. Google Cloud Consoleでプロジェクトを作成

  1. Google Cloud Consoleにアクセスします(Google Cloud Console)。
  2. 新しいプロジェクトを作成します。プロジェクト名は任意ですが、わかりやすい名前を付けてください。

2. Google Sheets APIを有効にする

  1. 作成したプロジェクトを選択します。
  2. ナビゲーションメニューから 「APIとサービス」 > 「ライブラリ」 を選択します。
  3. 検索バーに「Google Sheets API」と入力し、表示された結果から 「Google Sheets API」 を選択します。
  4. 「有効にする」 ボタンをクリックします。

3. 認証情報の作成

  1. 「APIとサービス」 > 「認証情報」 を選択します。
  2. 「認証情報を作成」 ボタンをクリックし、「サービスアカウント」 を選択します。
  3. サービスアカウント名とIDを入力し、「作成して続行」 をクリックします。
  4. サービスアカウントに役割を追加する必要があります。「プロジェクト」 > 「閲覧者」 もしくは 「エディター」 を選択し、「続行」 をクリックします。
  5. 「完了」 をクリックします。

4. サービスアカウントキーの生成

  1. 作成したサービスアカウントを選択し、「鍵」 タブに移動します。
  2. 「鍵を追加」 > 「新しい鍵を作成」 をクリックします。
  3. キータイプとして 「JSON」 を選択し、「作成」 をクリックします。
  4. 自動的にcredentials.jsonファイルがダウンロードされます。このファイルをプロジェクトディレクトリに配置します。

5. Google Sheets APIの認証情報をコードで使用

credentials.jsonを使用して、Google Sheets APIにアクセスします。以下に、Pythonコードの例を示します。

send_to_sheets.py

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 認証情報ファイルのパス
SERVICE_ACCOUNT_FILE = 'credentials.json'

# Google Sheets APIのスコープ
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

# 認証情報を使用して認証
creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# スプレッドシートIDと範囲の設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# 読み込んだデータの設定
df = pd.read_csv('./data/coconala_titles.csv')
values = [df.columns.values.tolist()] + df.values.tolist()

# Google Sheets APIサービスの作成
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

# データをスプレッドシートに書き込む
request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

実行手順

  1. DockerとDocker Composeのインストール

    • DockerとDocker Composeをインストールします。インストール手順は公式ドキュメントに従います(Dockerインストールガイド)。
  2. プロジェクトのクローンまたはダウンロード

    • プロジェクトをクローンまたはダウンロードします。
    git clone <repository_url>
    cd coconala_scraper
  3. Google Cloud Platformのセットアップ

    • サービスアカウントを作成し、credentials.jsonファイルを取得し、プロジェクトディレクトリに配置します。
  4. Dockerイメージのビルド

    docker-compose build
  5. データ収集コンテナの実行

    docker-compose run scraper
  6. データをGoogle Sheetsに送信するコンテナの実行

    docker-compose run send_to_sheets

この手順に従うことで、顧客は簡単にGoogle Sheets APIを設定し、データを収集してGoogle Sheetsに書き込むことができます。

stovecbr commented 3 weeks ago

2024/06/12のメモ

credentials.jsonファイルのような機密情報をGitリポジトリに含めないようにするためには、以下の手順を実行します。

1. .gitignoreファイルの設定

.gitignoreファイルを使用して、特定のファイルやディレクトリをGitの追跡対象から除外します。プロジェクトのルートディレクトリに .gitignoreファイルを作成し、credentials.jsonを含めます。

# .gitignore
credentials.json

2. 既にGitで追跡されているファイルの削除

.gitignoreファイルを設定する前に、credentials.jsonが既にGitで追跡されている場合は、Gitのインデックスから削除する必要があります。次のコマンドを実行します:

git rm --cached credentials.json

その後、コミットして変更を反映します。

git commit -m "Remove credentials.json from tracking"

3. 顧客への設定方法

credentials.jsonファイルをリポジトリに含めない場合、顧客が自分でファイルを追加できるように指示を提供する必要があります。

  1. 顧客にGoogle Cloud Consoleの設定手順を説明し、credentials.jsonファイルを取得するように指示します。
  2. 顧客がcredentials.jsonファイルをプロジェクトディレクトリに配置するように指示します。

4. Docker Composeの設定

Docker Composeファイルを更新して、credentials.jsonファイルをマウントする方法を示します。

更新後の docker-compose.yml

version: '3'
services:
  scraper:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - './data:/app/data'
      - './credentials.json:/app/credentials.json:ro'
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
    command: python scraper.py
    tty: true
    stdin_open: true

  send_to_sheets:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - './data:/app/data'
      - './credentials.json:/app/credentials.json:ro'
    environment:
      - GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
    command: python send_to_sheets.py
    tty: true
    stdin_open: true

5. プロジェクトのREADMEの更新

プロジェクトのREADME.mdファイルを更新して、credentials.jsonファイルをどのように設定するかを説明します。

# Coconala Scraper Project

## セットアップ手順

### 1. リポジトリのクローン

```sh
git clone <repository_url>
cd coconala_scraper

2. Google Cloud Platformのセットアップ

Google Cloud Consoleでサービスアカウントを作成し、credentials.jsonファイルを取得してください。詳細な手順はこちらを参照してください。取得したcredentials.jsonファイルをプロジェクトディレクトリに配置します。

3. Dockerイメージのビルド

docker-compose build

4. データ収集コンテナの実行

docker-compose run scraper

5. データをGoogle Sheetsに送信するコンテナの実行

docker-compose run send_to_sheets

この手順に従うことで、機密情報であるcredentials.jsonファイルをGitリポジトリに含めることなく、顧客が自分で適切に設定できるようにします。

stovecbr commented 3 weeks ago

2024/06/12のメモ②

Google Sheets APIを使用する際、サービスアカウントを作成する必要があります。サービスアカウントには、特定のリソースやAPIにアクセスするための認証情報が含まれています。以下に、サービスアカウント名とIDの詳細、およびサービスアカウントの作成手順を説明します。

サービスアカウントとは?

サービスアカウントは、Google Cloud内の仮想ユーザーです。特定のプロジェクトやAPIへのアクセス権を持ち、アプリケーションやコンテナがGoogle Cloudリソースにアクセスするために使用されます。サービスアカウントには、次のような情報が含まれます:

サービスアカウントの作成手順

1. Google Cloud Consoleにアクセス

2. プロジェクトの選択または作成

3. APIとサービス

4. サービスアカウントの作成

  1. 「認証情報を作成」ボタンをクリックし、「サービスアカウント」を選択します。
  2. サービスアカウントの名前を入力します。名前は人間が理解しやすいもので構いません。例えば、coconala-scraper-service-account
  3. サービスアカウントIDは自動的に生成されますが、必要に応じて編集できます。このIDは電子メール形式で表示されます(例:coconala-scraper-service-account@<project-id>.iam.gserviceaccount.com)。
  4. 「作成して続行」をクリックします。

5. サービスアカウントに役割を割り当てる

6. サービスアカウントのキーを作成

  1. 「鍵」タブに移動します。
  2. 「鍵を追加」 > 「新しい鍵を作成」をクリックします。
  3. キータイプとして「JSON」を選択し、「作成」をクリックします。
  4. 自動的にcredentials.jsonファイルがダウンロードされます。このファイルは後で使用するため、安全な場所に保管してください。

サービスアカウントの使用

  1. credentials.jsonをプロジェクトディレクトリに配置します。
  2. スプレッドシートの共有設定で、サービスアカウントのメールアドレス(サービスアカウントID)を追加して、適切な権限を付与します。

コードでサービスアカウントを使用

次に、Pythonコードでcredentials.jsonを使用してGoogle Sheets APIにアクセスする例を示します。

send_to_sheets.py

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 認証情報ファイルのパス
SERVICE_ACCOUNT_FILE = 'credentials.json'

# Google Sheets APIのスコープ
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

# 認証情報を使用して認証
creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# スプレッドシートIDと範囲の設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# 読み込んだデータの設定
df = pd.read_csv('./data/coconala_titles.csv')
values = [df.columns.values.tolist()] + df.values.tolist()

# Google Sheets APIサービスの作成
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

# データをスプレッドシートに書き込む
request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

まとめ

以上の手順に従うことで、Google Sheets APIのサービスアカウントを作成し、Pythonコードで使用するための設定が完了します。この方法を使えば、機密情報をリポジトリに含めずに、安全にGoogle Sheets APIにアクセスすることができます。

stovecbr commented 3 weeks ago

2024/06/12のメモ③

Google Sheets APIを使用してスプレッドシートにアクセスするには、スプレッドシートの共有設定とGoogle Cloud PlatformでのAPI設定を適切に行う必要があります。以下に、スプレッドシートの設定手順を詳しく説明します。

1. Google Sheetsの作成

  1. Google Sheetsにアクセスし、新しいスプレッドシートを作成します。これは、Google Driveから「新規」ボタンをクリックし、「Google スプレッドシート」を選択して作成できます。
  2. 作成したスプレッドシートのURLからスプレッドシートIDを取得します。URLは次のような形式になっています:

    https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit#gid=0

    ここで、your_spreadsheet_idの部分がスプレッドシートIDです。

2. スプレッドシートの共有設定

  1. スプレッドシートの右上にある「共有」ボタンをクリックします。

  2. 「共有」ダイアログで、「ユーザーやグループと共有」をクリックします。

  3. Google Cloudで作成したサービスアカウントのメールアドレスを入力します。メールアドレスは次のような形式です:

    your-service-account@your-project-id.iam.gserviceaccount.com
  4. 「エディター」権限を選択し、「送信」ボタンをクリックします。

3. Google Cloud Platformでの設定

1. Google Cloud Consoleでプロジェクトを作成

  1. Google Cloud Consoleにアクセスします(Google Cloud Console)。
  2. 新しいプロジェクトを作成します。プロジェクト名は任意ですが、わかりやすい名前を付けてください。

2. Google Sheets APIを有効にする

  1. 作成したプロジェクトを選択します。
  2. ナビゲーションメニューから「APIとサービス」 > 「ライブラリ」を選択します。
  3. 検索バーに「Google Sheets API」と入力し、表示された結果から「Google Sheets API」を選択します。
  4. 「有効にする」ボタンをクリックします。

3. 認証情報の作成

  1. 「APIとサービス」 > 「認証情報」を選択します。
  2. 「認証情報を作成」ボタンをクリックし、「サービスアカウント」を選択します。
  3. サービスアカウント名とIDを入力し、「作成して続行」をクリックします。
  4. サービスアカウントに役割を追加します。「プロジェクト」 > 「エディター」を選択し、「続行」をクリックします。
  5. 「完了」をクリックします。

4. サービスアカウントキーの生成

  1. 作成したサービスアカウントを選択し、「鍵」タブに移動します。
  2. 「鍵を追加」 > 「新しい鍵を作成」をクリックします。
  3. キータイプとして「JSON」を選択し、「作成」をクリックします。
  4. 自動的にcredentials.jsonファイルがダウンロードされます。このファイルをプロジェクトディレクトリに配置します。

4. Pythonコードでの設定

1. 必要なライブラリのインストール

以下のコマンドを実行して必要なライブラリをインストールします。

pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client pandas

2. Pythonコードの例

以下に、Google Sheets APIを使用してデータをスプレッドシートに書き込むためのPythonコードの例を示します。

import pandas as pd
from google.oauth2 import service_account
from googleapiclient.discovery import build

# 認証情報ファイルのパス
SERVICE_ACCOUNT_FILE = 'credentials.json'

# Google Sheets APIのスコープ
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

# 認証情報を使用して認証
creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# スプレッドシートIDと範囲の設定
SPREADSHEET_ID = 'your_spreadsheet_id'
RANGE_NAME = 'Sheet1!A1'

# 読み込んだデータの設定
df = pd.read_csv('./data/coconala_titles.csv')
values = [df.columns.values.tolist()] + df.values.tolist()

# Google Sheets APIサービスの作成
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()

# データをスプレッドシートに書き込む
request = sheet.values().update(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME,
                                valueInputOption='RAW', body={'values': values})
response = request.execute()

print("Data successfully sent to Google Sheets")

まとめ

以上の手順に従ってGoogle Sheets APIの設定を行うことで、スプレッドシートにデータを書き込むことができます。顧客に対しては、適切な手順を提供し、必要な設定を行うように案内します。

stovecbr commented 3 weeks ago

2024/06/12のメモ④

stovecbr commented 3 weeks ago

2024/06/12のメモ⑤

stovecbr commented 3 weeks ago

2024/06/12のメモ⑥

stovecbr commented 3 weeks ago

2024/06/13のメモ