pythonとseleniumでAmazonのランキングをツイートするBotを作成してみた!のコード
前回作成したAmazonランキング取得のデータをツイートするBotを作成してみました。
コードですが動画で話している通り通常で使うところを少し変更してる部分があります。
img_pathとかshort_urlとかです。
Short_URLに関してはツイートする直前で処理するようにこちらのプログラムは変更しています。
今回の動画は7/5/21:00に公開予定です
前回の動画
前回のコード
一応今回のコードに前回のコードも含まれています。
では、今回のコードです。
import schedule
import time
import random
import tweepy
from selenium import webdriver
import urllib
import requests
from time import sleep
#自分のキーやトークンを入れる。
api_key = ''
api_secret = ''
access_token = ''
access_token_secret = ''
#自分のアソシエイトIDを入れる my_id = "associate_id"
# Process href
def process_href(myid,href):
head = "https://www.amazon.co.jp/"
dp_str = "dp/"
asin_base = href.split(dp_str)
asin = asin_base[-1][:10]
url = f"{head}{dp_str}{asin}?tag={myid}"
return url
def get_shortenURL(longUrl):
sleep(1)
url = 'https://api-ssl.bitly.com/v3/shorten'
access_token = '65f6566c476a014242847833dcfe291490f9b47e'
query = {
'access_token': access_token,
'longurl':longUrl
}
r = requests.get(url,params=query).json()['data']['url']
return r
# 1時間ごとに実行したいため関数化する。
def get_rank():
ranking_list = []
# start Selenium
driver = webdriver.Chrome('chromedriver')
category_base = "https://www.amazon.co.jp/gp/bestsellers/"
category_toy = "toys"
category_toy_url = f"{category_base}{category_toy}/"
print(category_toy_url)
driver.get(category_toy_url)
# for
base_ele = driver.find_elements_by_css_selector('.a-section.a-spacing-none.aok-relative')
for base in base_ele:
ranking_item = {}
rank_ele = base.find_element_by_css_selector('span')
rank=rank_ele.text
base_2 = base.find_element_by_css_selector('.aok-inline-block.zg-item')
a_ele = base_2.find_element_by_css_selector('a')
href = a_ele.get_attribute('href')
comp_url = process_href(my_id,href)
# あとでやった方が効率がよさそう(ツイートするときとかに)
#short_url = get_shortenURL(comp_url)
short_url = comp_url
title_ele = a_ele.find_element_by_css_selector('.p13n-sc-truncated')
title = title_ele.text
evaluation_ele = base_2.find_element_by_css_selector('div > a')
evaluation = evaluation_ele.get_attribute('title')
try:
price_ele = base_2.find_element_by_css_selector('.a-row')
price = price_ele.text
except:
price_ele = base_2.find_element_by_css_selector('.a-link-normal.a-text-normal')
price = price_ele.text
img_ele = base_2.find_element_by_css_selector('img')
img_url = img_ele.get_attribute('src')
# パスを追加してそこに保存するようにする。名前はまだ、(日付カテゴリランク)とかがよさそう
img_path = img_url
# save picture
#urllib.request.urlretrieve(img_url, 'img_path')
ranking_item.update(img_path=img_path, rank=rank, title=title, short_url=short_url, evaluation=evaluation, price=price)
#print(ranking_item)
ranking_list.append(ranking_item)
print('データ抽出完了')
return ranking_list
def tweet():
ranking_list = get_rank()
tweet_content = ranking_list[random.randint(0, 49)]
rank = tweet_content["rank"]
title = tweet_content["title"]
short_url = get_shortenURL(tweet_content["short_url"])
evaluation = tweet_content["evaluation"]
price = tweet_content["price"]
img_path = tweet_content["img_path"]
tweet = f"{rank}\n{title}\n\n{evaluation}\n{price}\n{short_url}"
print(tweet)
auth = tweepy.OAuthHandler(api_key, api_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
api.update_with_media(status=tweet, filename=img_path)
print('ツイート完了')
schedule.every(1).hours.do(tweet)
while True:
schedule.run_pending()
time.sleep(1)
いただいたサポートは全額勉強のために使わせていただきます。 という綺麗事もありなんですけど、ただただモチベーションの維持に使わせていただこうかなと考えています。 という遊び心も置いといて、有難いことに記事を買っていただけているのでサポートしたいという気持ちだけでも有難いです。