1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スクレイピングした情報をgoogleカレンダーに反映

Posted at

クラウドワークスで取得した案件をgoogleカレンダーに登録するプログラムです。

結果

スクリーンショット 2023-06-02 18.17.03.png

指定したカレンダーIDのカレンダーにイベントを追加しています。

コード

import requests
from bs4 import BeautifulSoup
import datetime
from google.oauth2 import service_account
from googleapiclient.discovery import build
import re

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

索キーワードの入力
keyword = input("検索キーワードを入力してください: ")

# WebページのURL
url = "https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=true&search%5Bkeywords%5D=" + keyword

# Webページの取得
response = requests.get(url)
html = response.text

# BeautifulSoupを使ってHTMLを解析
soup = BeautifulSoup(html, "html.parser")

入力したキーワードで案件を検索し、ページのhtmlを取得しています。

# イベント情報の取得(イベントの名前と日付を取得します)
event_name = soup.find('h3', class_='item_title').text
event_date = soup.find('span', class_='absolute_date').text
# '(6月3日まで)'という形式の日付データから日付部分を抽出
event_date = soup.find('span', class_='absolute_date').text
match = re.search(r'(\d+)月(\d+)日', event_date)
if match:
    month = int(match.group(1))
    day = int(match.group(2))

    # 年は現在の年とする(他の方法で取得することも可能)
    year = datetime.datetime.now().year

    # 日付をdatetimeオブジェクトに変換
    event_date = datetime.datetime(year, month, day)

タグとクラスから案件のタイトル、日付を取得し、日付は使えるようにdatetimeオブジェクトに変換。

  event_body = {
        'summary': event_name,
        'start': {
            'dateTime': event_date.isoformat(),
            'timeZone': 'Asia/Tokyo',
        },
        'end': {
            'dateTime': (event_date + datetime.timedelta(hours=1)).isoformat(),
            'timeZone': 'Asia/Tokyo',
        },
    }

カレンダーに反映させるevent_bodyオブジェクトを作成。

# Google Calendar APIの設定
SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'service_account.json' 

google calendarのAPIの認証情報を保存。

credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('calendar', 'v3', credentials=credentials)

serviceオブジェクトを構築し、googleカレンダーをpythonで操作できるように。

service.events().insert(calendarId='primary', body=event_body).execute()

最後に、カレンダーにイベントを追加。

全体コード

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import requests
from bs4 import BeautifulSoup
import datetime
from google.oauth2 import service_account
from googleapiclient.discovery import build
import re


# In[2]:


# 検索キーワードの入力
keyword = input("検索キーワードを入力してください: ")

# WebページのURL
url = "https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=true&search%5Bkeywords%5D=" + keyword

# Webページの取得
response = requests.get(url)
html = response.text

# BeautifulSoupを使ってHTMLを解析
soup = BeautifulSoup(html, "html.parser")


# In[3]:


# イベント情報の取得(イベントの名前と日付を取得します)
event_name = soup.find('h3', class_='item_title').text
event_date = soup.find('span', class_='absolute_date').text
# '(6月3日まで)'という形式の日付データから日付部分を抽出
event_date = soup.find('span', class_='absolute_date').text
match = re.search(r'(\d+)月(\d+)日', event_date)
if match:
    month = int(match.group(1))
    day = int(match.group(2))

    # 年は現在の年とする(他の方法で取得することも可能)
    year = datetime.datetime.now().year

    # 日付をdatetimeオブジェクトに変換
    event_date = datetime.datetime(year, month, day)
    
    event_body = {
        'summary': event_name,
        'start': {
            'dateTime': event_date.isoformat(),
            'timeZone': 'Asia/Tokyo',
        },
        'end': {
            'dateTime': (event_date + datetime.timedelta(hours=1)).isoformat(),
            'timeZone': 'Asia/Tokyo',
        },
    }
    


# In[4]:


# Google Calendar APIの設定
SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'service_account.json' 


# In[5]:


credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('calendar', 'v3', credentials=credentials)


# In[6]:


service.events().insert(calendarId='primary', body=event_body).execute()


# In[ ]:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?