올해 1년을 맛있을 것 같은 맥주 사진과 함께 되돌아 본다
16233 단어 Python3TwitterAPIFlask
머리
올해는 후반(전직 후)이 바빠서, 커뮤니티 활동도 혼잡해 버려, 관계 각처에 대단히 폐를 끼쳤습니다. 내년에는 조금 조정해, 여러가지 할 수 있도록 하고 싶습니다(욕망)
올해의 출력
작년부터 참가하고 있는 @tacck씨 주최의, 「유루 웹 공부회 @삿포로 했다.
작성 당시에는 프레임워크도 사용하지 않고 커맨드 라인에서 실행하면 로컬 폴더에 취득한 이미지를 저장하는 것이 었습니다. 수정 중입니다.
실제 소스 코드
# Flask などの必要なライブラリをインポートする
import os
import json
import time
import lxml.html
import cssselect
import itertools
import re
from datetime import datetime, timedelta
from flask import Flask, render_template, request, redirect, url_for
from dotenv import load_dotenv
from TwitterAPI import TwitterAPI
app = Flask(__name__)
load_dotenv()
CK = os.environ.get('CONSUMER_KEY')
CS = os.environ.get('CONSUMER_SECRET')
AT = os.environ.get('ACCESS_TOKEN')
ATS = os.environ.get('ACCESS_TOKEN_SECRET')
SEARCH_TERM = os.environ.get('TARGET_ACCOUNT')
api = TwitterAPI(CK, CS, AT, ATS)
mkdir_name = "bier_illustration"
reg_url = r"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
data_next = '0'
# Tweetを取得
def get_target_word(keyword):
global data_next
# fullarchive start
from_date_string = '200603210000'
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
# fullarchive end
# 30days start
'''
from_date = datetime.now()
from_date -= timedelta(days=30)
from_date_string = from_date.strftime('%Y%m%d0000')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
'''
# 30days end
timeline = json.loads(req.text)
try:
data_next = timeline['next']
except KeyError:
data_next = '***'
finally:
return timeline
# 取得したツイートに画像があれば、その画像を取得する
def get_illustration(timeline):
biers = []
try:
for tweet in timeline['results']:
bier_dic = {}
time_stirng = time.strftime('%Y-%m-%d', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
# tweetから直接画像を取得
extended_entities = tweet.get('extended_entities')
if extended_entities == None:
pass
else:
media_list = tweet['extended_entities']['media']
for media in media_list:
print('get twitter embedded picture')
bier_dic['url'] = media['media_url']
bier_dic['file_name'] = time_stirng + "_" + os.path.basename(media['media_url'])
biers.append(bier_dic)
return biers
except KeyError:
print('KeyError')
return []
except:
import traceback
traceback.print_exc()
return []
# ここからウェブアプリケーション用のルーティングを記述
# index にアクセスしたときの処理
@app.route('/')
def index():
all_biers = []
# 検索対象の単語を設定
while True:
keyword = os.environ.get('TARGET_KEYWORD')
timeline = get_target_word(keyword)
ret_bier = get_illustration(timeline)
if ret_bier == []:
print('no data')
break
else:
all_biers.append(ret_bier)
# index.html をレンダリングする
return render_template('index.html', biers=list(itertools.chain.from_iterable(all_biers)), title=os.environ.get('TITLE'))
if __name__ == '__main__':
app.debug = True # デバッグモード有効化
app.run(host='127.0.0.1') # どこからでもアクセス可能に
소스 코드 정보
본 엔트리의 타이틀에도 있는 대로, 완전하게 재료입니다만, 소스 코드 자체는 보통의 TwitterAPI 를 이용한, 화상 수집 프로그램입니다. 내용적으로는 어려운 곳은 없지만, Twitter의 API의 사양을 완전히 파악할 수 없고, 현재는 아직 버그가 있습니다. (100건이 넘는 트윗을 받지 못함)
이외에 템플릿 등도 있지만 큰 내용이 아니므로 생략합니다.
실행 결과
끝에
내년의 공부회를 향해, 이 프로그램을 발전시켜, 기계 학습등도 해 보고 싶습니다.
내년도 잘 부탁드립니다. > 관계자 각위
Reference
이 문제에 관하여(올해 1년을 맛있을 것 같은 맥주 사진과 함께 되돌아 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/machshev/items/bd10ab0bc59d4146ef2a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
작년부터 참가하고 있는 @tacck씨 주최의, 「유루 웹 공부회 @삿포로 했다.
작성 당시에는 프레임워크도 사용하지 않고 커맨드 라인에서 실행하면 로컬 폴더에 취득한 이미지를 저장하는 것이 었습니다. 수정 중입니다.
실제 소스 코드
# Flask などの必要なライブラリをインポートする
import os
import json
import time
import lxml.html
import cssselect
import itertools
import re
from datetime import datetime, timedelta
from flask import Flask, render_template, request, redirect, url_for
from dotenv import load_dotenv
from TwitterAPI import TwitterAPI
app = Flask(__name__)
load_dotenv()
CK = os.environ.get('CONSUMER_KEY')
CS = os.environ.get('CONSUMER_SECRET')
AT = os.environ.get('ACCESS_TOKEN')
ATS = os.environ.get('ACCESS_TOKEN_SECRET')
SEARCH_TERM = os.environ.get('TARGET_ACCOUNT')
api = TwitterAPI(CK, CS, AT, ATS)
mkdir_name = "bier_illustration"
reg_url = r"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
data_next = '0'
# Tweetを取得
def get_target_word(keyword):
global data_next
# fullarchive start
from_date_string = '200603210000'
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
# fullarchive end
# 30days start
'''
from_date = datetime.now()
from_date -= timedelta(days=30)
from_date_string = from_date.strftime('%Y%m%d0000')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
'''
# 30days end
timeline = json.loads(req.text)
try:
data_next = timeline['next']
except KeyError:
data_next = '***'
finally:
return timeline
# 取得したツイートに画像があれば、その画像を取得する
def get_illustration(timeline):
biers = []
try:
for tweet in timeline['results']:
bier_dic = {}
time_stirng = time.strftime('%Y-%m-%d', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
# tweetから直接画像を取得
extended_entities = tweet.get('extended_entities')
if extended_entities == None:
pass
else:
media_list = tweet['extended_entities']['media']
for media in media_list:
print('get twitter embedded picture')
bier_dic['url'] = media['media_url']
bier_dic['file_name'] = time_stirng + "_" + os.path.basename(media['media_url'])
biers.append(bier_dic)
return biers
except KeyError:
print('KeyError')
return []
except:
import traceback
traceback.print_exc()
return []
# ここからウェブアプリケーション用のルーティングを記述
# index にアクセスしたときの処理
@app.route('/')
def index():
all_biers = []
# 検索対象の単語を設定
while True:
keyword = os.environ.get('TARGET_KEYWORD')
timeline = get_target_word(keyword)
ret_bier = get_illustration(timeline)
if ret_bier == []:
print('no data')
break
else:
all_biers.append(ret_bier)
# index.html をレンダリングする
return render_template('index.html', biers=list(itertools.chain.from_iterable(all_biers)), title=os.environ.get('TITLE'))
if __name__ == '__main__':
app.debug = True # デバッグモード有効化
app.run(host='127.0.0.1') # どこからでもアクセス可能に
소스 코드 정보
본 엔트리의 타이틀에도 있는 대로, 완전하게 재료입니다만, 소스 코드 자체는 보통의 TwitterAPI 를 이용한, 화상 수집 프로그램입니다. 내용적으로는 어려운 곳은 없지만, Twitter의 API의 사양을 완전히 파악할 수 없고, 현재는 아직 버그가 있습니다. (100건이 넘는 트윗을 받지 못함)
이외에 템플릿 등도 있지만 큰 내용이 아니므로 생략합니다.
실행 결과
끝에
내년의 공부회를 향해, 이 프로그램을 발전시켜, 기계 학습등도 해 보고 싶습니다.
내년도 잘 부탁드립니다. > 관계자 각위
Reference
이 문제에 관하여(올해 1년을 맛있을 것 같은 맥주 사진과 함께 되돌아 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/machshev/items/bd10ab0bc59d4146ef2a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# Flask などの必要なライブラリをインポートする
import os
import json
import time
import lxml.html
import cssselect
import itertools
import re
from datetime import datetime, timedelta
from flask import Flask, render_template, request, redirect, url_for
from dotenv import load_dotenv
from TwitterAPI import TwitterAPI
app = Flask(__name__)
load_dotenv()
CK = os.environ.get('CONSUMER_KEY')
CS = os.environ.get('CONSUMER_SECRET')
AT = os.environ.get('ACCESS_TOKEN')
ATS = os.environ.get('ACCESS_TOKEN_SECRET')
SEARCH_TERM = os.environ.get('TARGET_ACCOUNT')
api = TwitterAPI(CK, CS, AT, ATS)
mkdir_name = "bier_illustration"
reg_url = r"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
data_next = '0'
# Tweetを取得
def get_target_word(keyword):
global data_next
# fullarchive start
from_date_string = '200603210000'
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/fullarchive/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
# fullarchive end
# 30days start
'''
from_date = datetime.now()
from_date -= timedelta(days=30)
from_date_string = from_date.strftime('%Y%m%d0000')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
if (data_next == '***'):
return []
elif (data_next == '0'):
print('first fetch')
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string})
else:
print('next fetch:' + data_next)
req = api.request('tweets/search/30day/:bier', {'query': SEARCH_TERM + keyword, 'fromDate': from_date_string, 'next': data_next})
'''
# 30days end
timeline = json.loads(req.text)
try:
data_next = timeline['next']
except KeyError:
data_next = '***'
finally:
return timeline
# 取得したツイートに画像があれば、その画像を取得する
def get_illustration(timeline):
biers = []
try:
for tweet in timeline['results']:
bier_dic = {}
time_stirng = time.strftime('%Y-%m-%d', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
# tweetから直接画像を取得
extended_entities = tweet.get('extended_entities')
if extended_entities == None:
pass
else:
media_list = tweet['extended_entities']['media']
for media in media_list:
print('get twitter embedded picture')
bier_dic['url'] = media['media_url']
bier_dic['file_name'] = time_stirng + "_" + os.path.basename(media['media_url'])
biers.append(bier_dic)
return biers
except KeyError:
print('KeyError')
return []
except:
import traceback
traceback.print_exc()
return []
# ここからウェブアプリケーション用のルーティングを記述
# index にアクセスしたときの処理
@app.route('/')
def index():
all_biers = []
# 検索対象の単語を設定
while True:
keyword = os.environ.get('TARGET_KEYWORD')
timeline = get_target_word(keyword)
ret_bier = get_illustration(timeline)
if ret_bier == []:
print('no data')
break
else:
all_biers.append(ret_bier)
# index.html をレンダリングする
return render_template('index.html', biers=list(itertools.chain.from_iterable(all_biers)), title=os.environ.get('TITLE'))
if __name__ == '__main__':
app.debug = True # デバッグモード有効化
app.run(host='127.0.0.1') # どこからでもアクセス可能に
본 엔트리의 타이틀에도 있는 대로, 완전하게 재료입니다만, 소스 코드 자체는 보통의 TwitterAPI 를 이용한, 화상 수집 프로그램입니다. 내용적으로는 어려운 곳은 없지만, Twitter의 API의 사양을 완전히 파악할 수 없고, 현재는 아직 버그가 있습니다. (100건이 넘는 트윗을 받지 못함)
이외에 템플릿 등도 있지만 큰 내용이 아니므로 생략합니다.
실행 결과
끝에
내년의 공부회를 향해, 이 프로그램을 발전시켜, 기계 학습등도 해 보고 싶습니다.
내년도 잘 부탁드립니다. > 관계자 각위
Reference
이 문제에 관하여(올해 1년을 맛있을 것 같은 맥주 사진과 함께 되돌아 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/machshev/items/bd10ab0bc59d4146ef2a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
내년의 공부회를 향해, 이 프로그램을 발전시켜, 기계 학습등도 해 보고 싶습니다.
내년도 잘 부탁드립니다. > 관계자 각위
Reference
이 문제에 관하여(올해 1년을 맛있을 것 같은 맥주 사진과 함께 되돌아 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/machshev/items/bd10ab0bc59d4146ef2a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)