クラウドワークスで取得した案件をgoogleカレンダーに登録するプログラムです。
結果
指定したカレンダー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[ ]: