ขณะนี้จุดสิ้นสุดการค้นหา Twitter v2 รวมจุดสิ้นสุด 'การนับ' ที่ส่งคืนผลรวมอนุกรมเวลาของทวีตที่ตรงกัน
โปรเจ็กต์นี้ทำหน้าที่เป็น wrapper สำหรับ Twitter ระดับพรีเมียมและ API การค้นหาระดับองค์กร โดยจัดให้มียูทิลิตีบรรทัดคำสั่งและไลบรารี Python เอกสารสวย ๆ สามารถดูได้ที่นี่
jq
) ไลบรารี searchtweets
อยู่บน Pypi:
pip install searchtweets
หรือคุณสามารถติดตั้งเวอร์ชันการพัฒนาภายในเครื่องผ่านทาง
git clone https://github.com/twitterdev/search-tweets-python
cd search-tweets-python
pip install -e .
API การค้นหาระดับพรีเมียมและระดับองค์กรใช้วิธีการตรวจสอบสิทธิ์ที่แตกต่างกัน และเราพยายามที่จะมอบวิธีที่ราบรื่นในการจัดการการตรวจสอบสิทธิ์สำหรับลูกค้าทุกคน เรารู้ว่าข้อมูลรับรองอาจเป็นเรื่องยุ่งยากหรือน่ารำคาญ โปรดอ่านข้อมูลนี้ให้ครบถ้วน
ลูกค้าระดับพรีเมียมจะต้องมีช่อง bearer_token
และ endpoint
ไคลเอนต์องค์กรจำเป็นต้องมี username
password
และ endpoint
หากคุณไม่ระบุ account_type
เราจะพยายามแยกแยะประเภทบัญชีและประกาศคำเตือนเกี่ยวกับพฤติกรรมนี้
สำหรับผลิตภัณฑ์การค้นหาระดับพรีเมียม เรากำลังใช้การตรวจสอบสิทธิ์เฉพาะแอปเท่านั้น และโทเค็นผู้ถือจะไม่ส่งมอบพร้อมเวลาหมดอายุ คุณสามารถระบุ: - รหัสแอปพลิเคชันและความลับของคุณ (ไลบรารีจะจัดการการรับรองความถูกต้องของผู้ถือโทเค็น) - โทเค็นผู้ถือที่คุณได้รับด้วยตัวเอง
นักพัฒนาจำนวนมากอาจพบว่าการให้คีย์แอปพลิเคชันและความลับของคุณตรงไปตรงมามากขึ้น และปล่อยให้ไลบรารีนี้จัดการการสร้างโทเค็นผู้ถือให้กับคุณ โปรดดูที่นี่สำหรับภาพรวมของวิธีการตรวจสอบสิทธิ์แบบพรีเมียม
เรารองรับทั้งวิธีการที่ใช้ไฟล์ YAML และตัวแปรสภาพแวดล้อมสำหรับการจัดเก็บข้อมูลประจำตัว และให้การจัดการที่ยืดหยุ่นด้วยค่าเริ่มต้นที่สมเหตุสมผล
สำหรับลูกค้าระดับพรีเมียม ไฟล์ข้อมูลรับรองที่ง่ายที่สุดควรมีลักษณะดังนี้:
search_tweets_api :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
consumer_key : <CONSUMER_KEY>
consumer_secret : <CONSUMER_SECRET>
สำหรับลูกค้าองค์กร ไฟล์ข้อมูลรับรองที่ง่ายที่สุดควรมีลักษณะดังนี้:
search_tweets_api :
account_type : enterprise
endpoint : <FULL_URL_OF_ENDPOINT>
username : <USERNAME>
password : <PW>
ตามค่าเริ่มต้น ไลบรารีนี้คาดว่าไฟล์นี้จะอยู่ที่ "~/.twitter_keys.yaml"
แต่คุณสามารถส่งตำแหน่งที่เกี่ยวข้องได้ตามต้องการ โดยใช้แฟล็ก --credential-file
สำหรับแอปบรรทัดคำสั่ง หรือตามที่แสดงด้านล่างใน Python โปรแกรม
ทั้งสองตัวอย่างข้างต้นไม่จำเป็นต้องมีอาร์กิวเมนต์บรรทัดคำสั่งพิเศษหรืออาร์กิวเมนต์ในโปรแกรม วิธีการแยกวิเคราะห์ข้อมูลประจำตัว เว้นแต่จะระบุไว้เป็นอย่างอื่น จะค้นหาคีย์ YAML ที่เรียกว่า search_tweets_api
สำหรับนักพัฒนาที่มีปลายทางหลายจุดและ/หรือค้นหาผลิตภัณฑ์ คุณสามารถเก็บข้อมูลประจำตัวทั้งหมดไว้ในไฟล์เดียวกันและระบุคีย์เฉพาะที่จะใช้ได้ --credential-file-key
ระบุพฤติกรรมนี้ในแอปบรรทัดคำสั่ง ตัวอย่าง:
search_tweets_30_day_dev :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
consumer_key : <KEY>
consumer_secret : <SECRET>
(optional) bearer_token : <TOKEN>
search_tweets_30_day_prod :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
bearer_token : <TOKEN>
search_tweets_fullarchive_dev :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
bearer_token : <TOKEN>
search_tweets_fullarchive_prod :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
bearer_token : <TOKEN>
หากคุณต้องการหรือจำเป็นต้องส่งข้อมูลประจำตัวผ่านตัวแปรสภาพแวดล้อม คุณสามารถตั้งค่าตัวแปรที่เหมาะสมสำหรับผลิตภัณฑ์ของคุณดังต่อไปนี้:
ส่งออก SEARCHWEETS_ENDPOINT= ส่งออก SEARCHTWEETS_USERNAME= ส่งออก SEARCHWEETS_PASSWORD= ส่งออก SEARCHTWEETS_BEARER_TOKEN= ส่งออก SEARCHTWEETS_ACCOUNT_TYPE= ส่งออก SEARCHTWEETS_CONSUMER_KEY= ส่งออก SEARCHTWEETS_CONSUMER_SECRET=
ฟังก์ชัน load_credentials
จะพยายามค้นหาตัวแปรเหล่านี้หากไม่สามารถโหลดฟิลด์จากไฟล์ YAML ได้ และจะ เขียนทับข้อมูลรับรองใด ๆ จากไฟล์ YAML ที่แสดงเป็นตัวแปรสภาพแวดล้อม หากมีการแยกวิเคราะห์ ลักษณะการทำงานนี้สามารถเปลี่ยนแปลงได้โดยการตั้งค่าพารามิเตอร์ load_credentials
env_overwrite
เป็น False
เซลล์ต่อไปนี้สาธิตการจัดการข้อมูลรับรองในไลบรารี Python
from searchtweets import load_credentials
load_credentials ( filename = "./search_tweets_creds_example.yaml" ,
yaml_key = "search_tweets_ent_example" ,
env_overwrite = False )
{'ชื่อผู้ใช้': '<MY_USERNAME>', 'รหัสผ่าน': '<รหัสผ่านของฉัน>', 'จุดสิ้นสุด': '<MY_ENDPOINT>'}
load_credentials ( filename = "./search_tweets_creds_example.yaml" ,
yaml_key = "search_tweets_premium_example" ,
env_overwrite = False )
{'bearer_token': '<A_VERY_LONG_MAGIC_STRING>', 'จุดสิ้นสุด': 'https://api.twitter.com/1.1/twitters/search/30day/dev.json', 'extra_headers_dict': ไม่มี}
หากเราตั้งค่าตัวแปรสภาพแวดล้อม โปรแกรมจะค้นหาตัวแปรเหล่านั้นโดยไม่คำนึงถึงความถูกต้องหรือการมีอยู่ของไฟล์ YAML
import os
os . environ [ "SEARCHTWEETS_USERNAME" ] = "<ENV_USERNAME>"
os . environ [ "SEARCHTWEETS_PASSWORD" ] = "<ENV_PW>"
os . environ [ "SEARCHTWEETS_ENDPOINT" ] = "<https://endpoint>"
load_credentials ( filename = "nothing_here.yaml" , yaml_key = "no_key_here" )
ไม่สามารถอ่านไฟล์ none_here.yaml ได้ เกิดข้อผิดพลาดในการแยกวิเคราะห์ไฟล์ YAML ค้นหาตัวแปรสภาพแวดล้อมที่ถูกต้อง
{'ชื่อผู้ใช้': '<ENV_USERNAME>', 'รหัสผ่าน': '<ENV_PW>', 'จุดสิ้นสุด': '<https://จุดสิ้นสุด>'}
ธง:
--credential-file <FILENAME>
--credential-file-key <KEY>
--env-overwrite
ใช้เพื่อควบคุมพฤติกรรมข้อมูลประจำตัวจากแอปบรรทัดคำสั่ง
ไลบรารีประกอบด้วยแอปพลิเคชัน search_tweets.py
ที่ให้การเข้าถึงทวีตอย่างรวดเร็ว เมื่อคุณใช้ pip
เพื่อติดตั้งแพ็คเกจนี้ search_tweets.py
จะถูกติดตั้งทั่วโลก ไฟล์อยู่ในไดเร็กทอรี tools/
สำหรับผู้ที่ต้องการเรียกใช้งานในเครื่อง
โปรดทราบว่า --results-per-call
flag ระบุอาร์กิวเมนต์ของ API ( maxResults
ผลลัพธ์ที่ส่งคืนต่อ CALL) ไม่ใช่จำนวนผลลัพธ์สูงสุดที่ส่งคืนจากโปรแกรมนี้ อาร์กิวเมนต์ --max-results
กำหนดจำนวนผลลัพธ์สูงสุดที่ส่งคืนจากการโทรที่กำหนด ตัวอย่างทั้งหมดถือว่าข้อมูลรับรองของคุณได้รับการตั้งค่าอย่างถูกต้องในตำแหน่งเริ่มต้น - .twitter_keys.yaml
หรือในตัวแปรสภาพแวดล้อม
สตรีมผลลัพธ์ json ไปที่ stdout โดยไม่บันทึก
search_tweets.py
--max-results 1000
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--print-stream
สตรีมผลลัพธ์ json ไปที่ stdout และบันทึกลงในไฟล์
search_tweets.py
--max-results 1000
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--filename-prefix beyonce_geo
--print-stream
บันทึกเป็นไฟล์โดยไม่มีเอาต์พุต
search_tweets.py
--max-results 100
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--filename-prefix beyonce_geo
--no-print-stream
ส่วนหัวที่กำหนดเองตั้งแต่หนึ่งรายการขึ้นไปสามารถระบุได้จากบรรทัดคำสั่ง โดยใช้อาร์กิวเมนต์ --extra-headers
และสตริงที่จัดรูปแบบ JSON ซึ่งแสดงถึงพจนานุกรมของส่วนหัวเพิ่มเติม:
search_tweets.py
--filter-rule " beyonce has:hashtags "
--extra-headers ' {"<MY_HEADER_KEY>":"<MY_HEADER_VALUE>"} '
ตัวเลือกสามารถส่งผ่านไฟล์กำหนดค่าได้ (ทั้ง ini หรือ YAML) ไฟล์ตัวอย่างสามารถพบได้ในไฟล์ tools/api_config_example.config
หรือ ./tools/api_yaml_example.yaml
ซึ่งอาจมีลักษณะดังนี้:
[search_rules]
from_date = 2017-06-01
to_date = 2017-09-01
pt_rule = beyonce has:geo
[search_params]
results_per_call = 500
max_results = 500
[output_params]
save_file = True
filename_prefix = beyonce
results_per_file = 10000000
หรือสิ่งนี้:
search_rules :
from-date : 2017-06-01
to-date : 2017-09-01 01:01
pt-rule : kanye
search_params :
results-per-call : 500
max-results : 500
output_params :
save_file : True
filename_prefix : kanye
results_per_file : 10000000
ส่วนหัวที่กำหนดเองสามารถระบุได้ในไฟล์กำหนดค่า ภายใต้คีย์ข้อมูลรับรองเฉพาะ:
search_tweets_api :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
username : <USERNAME>
password : <PW>
extra_headers :
<MY_HEADER_KEY> : <MY_HEADER_VALUE>
เมื่อใช้ไฟล์กำหนดค่าร่วมกับยูทิลิตีบรรทัดคำสั่ง คุณจะต้องระบุไฟล์กำหนดค่าผ่านพารามิเตอร์ --config-file
อาร์กิวเมนต์บรรทัดคำสั่งเพิ่มเติมจะถูก เพิ่มลง ในไฟล์กำหนดค่า args หรือ เขียนทับ ไฟล์กำหนดค่า args หากมีการระบุทั้งคู่และมีอยู่
ตัวอย่าง:
search_twitters.py --config ไฟล์ myapiconfig.config --no-พิมพ์สตรีม
ตัวเลือกทั้งหมดมีดังต่อไปนี้:
$ search_twitters.py -h การใช้งาน: search_twitters.py [-h] [--ไฟล์ข้อมูลรับรอง CREDENTIAL_FILE] [--รหัสไฟล์ข้อมูลประจำตัว CREDENTIAL_YAML_KEY] [--env-เขียนทับ ENV_OVERWRITE] [--config ไฟล์ CONFIG_FILENAME] [--ประเภทบัญชี {พรีเมียม องค์กร}] [--นับถัง COUNT_BUCKET] [--วันที่และเวลาเริ่มต้น FROM_DATE] [--วันที่และเวลาสิ้นสุด TO_DATE] [--กฎตัวกรอง PT_RULE] [--ผลลัพธ์ต่อการโทร RESULTS_PER_CALL] [--ผลลัพธ์สูงสุด MAX_RESULTS] [--หน้าสูงสุด MAX_PAGES] [--ผลลัพธ์ต่อไฟล์ RESULTS_PER_FILE] [--ชื่อไฟล์-คำนำหน้า FILENAME_PREFIX] [--ไม่มีการพิมพ์สตรีม] [--พิมพ์สตรีม] [--ส่วนหัวพิเศษ EXTRA_HEADERS] [--แก้ปัญหา] อาร์กิวเมนต์ทางเลือก: -h, --help แสดงข้อความช่วยเหลือนี้และออก --credential-ไฟล์ CREDENTIAL_FILE ตำแหน่งของไฟล์ yaml ที่ใช้เก็บของคุณ ข้อมูลรับรอง --credential-file-key CREDENTIAL_YAML_KEY คีย์ในไฟล์ข้อมูลรับรองที่ใช้สำหรับเซสชันนี้ ข้อมูลรับรอง ค่าเริ่มต้นเป็น search_twitters_api --env-เขียนทับ ENV_OVERWRITE เขียนทับข้อมูลประจำตัวที่แยกวิเคราะห์ YAML ด้วยชุดใดๆ ตัวแปรสภาพแวดล้อม ดูเอกสาร API หรือ readme รายละเอียด. --config ไฟล์ CONFIG_FILENAME ไฟล์การกำหนดค่าพร้อมพารามิเตอร์ทั้งหมด ไกลง่ายกว่า ใช้มากกว่ารุ่น args บรรทัดคำสั่งหากถูกต้อง พบไฟล์แล้ว args ทั้งหมดจะถูกเติมจากนั้น args บรรทัดคำสั่งที่เหลือจะลบล้าง args ที่พบ ในการกำหนดค่าไฟล์ --ประเภทบัญชี {พรีเมียม องค์กร} ประเภทบัญชีที่คุณใช้ --นับถัง COUNT_BUCKET ตั้งค่านี้เพื่อทำการร้องขอ 'นับ' ขนาดที่เก็บข้อมูลสำหรับปลายทางการนับ ตัวเลือก:, วัน, ชั่วโมง, นาที. --วันที่เริ่มต้นและเวลา FROM_DATE เริ่มต้นของหน้าต่าง datetime รูปแบบ 'YYYY-mm-DDTHH:MM' (ค่าเริ่มต้น: -30 วัน) --สิ้นสุดวันที่และเวลา TO_DATE สิ้นสุดหน้าต่างวันที่และเวลา รูปแบบ 'YYYY-mm-DDTHH:MM' (ค่าเริ่มต้น: วันที่ล่าสุด) --ตัวกรองกฎ PT_RULE กฎตัวกรอง PowerTrack (ดู: http://support.gnip.com/c ลูกค้า/พอร์ทัล/บทความ/901152-ตัวดำเนินการ powertrack) --ผลลัพธ์ต่อการโทร RESULTS_PER_CALL จำนวนผลลัพธ์ที่จะส่งคืนต่อการโทร (ค่าเริ่มต้น 100; สูงสุด 500) - สอดคล้องกับ 'maxResults' ใน API หากส่งคำขอ 'นับ' ด้วย '--count-bucket' พารามิเตอร์นี้จะถูกละเว้น --ผลลัพธ์สูงสุด MAX_RESULTS จำนวนทวีตหรือจำนวนสูงสุดที่ส่งคืนสำหรับสิ่งนี้ เซสชัน (ค่าเริ่มต้นคือ 500) --สูงสุดหน้า MAX_PAGES จำนวนเพจ/การเรียก API สูงสุดที่จะใช้สำหรับสิ่งนี้ การประชุม. --ผลลัพธ์ต่อไฟล์ RESULTS_PER_FILE ทวีตสูงสุดที่จะบันทึกต่อไฟล์ --ชื่อไฟล์-คำนำหน้า FILENAME_PREFIX คำนำหน้าสำหรับชื่อไฟล์ที่ข้อมูลทวีต json จะเป็น เก็บไว้ --no-print-stream ปิดการใช้งานการสตรีมการพิมพ์ --print-stream พิมพ์ทวีตสตรีมไปที่ stdout --ส่วนหัวพิเศษ EXTRA_HEADERS str ที่จัดรูปแบบ JSON แสดงถึงคำสั่งเพิ่มเติม ขอส่วนหัว --debug พิมพ์ข้อมูลและข้อความเตือนทั้งหมด
การทำงานกับ API ภายในโปรแกรม Python นั้นตรงไปตรงมาทั้งสำหรับไคลเอนต์ Premium และ Enterprise
เราจะถือว่าข้อมูลรับรองอยู่ในตำแหน่งเริ่มต้น ~/.twitter_keys.yaml
from searchtweets import ResultStream , gen_rule_payload , load_credentials
enterprise_search_args = load_credentials ( "~/.twitter_keys.yaml" ,
yaml_key = "search_tweets_enterprise" ,
env_overwrite = False )
premium_search_args = load_credentials ( "~/.twitter_keys.yaml" ,
yaml_key = "search_tweets_premium" ,
env_overwrite = False )
มีฟังก์ชันที่จัดรูปแบบกฎการค้นหา API เป็นการสืบค้น json ที่ถูกต้องที่เรียกว่า gen_rule_payload
มีค่าเริ่มต้นที่สมเหตุสมผล เช่น การดึงทวีตต่อการโทรมากกว่าค่าเริ่มต้น 100 (แต่โปรดทราบว่าสภาพแวดล้อมแบบแซนด์บ็อกซ์สามารถมีได้สูงสุด 100 รายการที่นี่ ดังนั้นหากคุณได้รับข้อผิดพลาด โปรดตรวจสอบสิ่งนี้) โดยไม่รวมวันที่ การอภิปรายประเด็นปลีกย่อยของการสร้างกฎการค้นหาอยู่นอกขอบเขตสำหรับตัวอย่างเหล่านี้ ฉันขอแนะนำให้คุณดูเอกสารเพื่อเรียนรู้ความแตกต่างภายใน แต่สำหรับตอนนี้ เรามาดูกันว่ากฎจะเป็นอย่างไร
rule = gen_rule_payload ( "beyonce" , results_per_call = 100 ) # testing with a sandbox account
print ( rule )
{"query": "บียอนเซ่", "maxResults":100}
กฎนี้จะจับคู่ทวีตที่มีข้อความ beyonce
ด้วย
จากจุดนี้ มีสองวิธีในการโต้ตอบกับ API มีวิธีการที่รวดเร็วในการรวบรวมทวีตจำนวนเล็กน้อยในหน่วยความจำที่ต้องใช้ความคิดและความรู้น้อยลง และการโต้ตอบกับออบเจ็กต์ ResultStream
ซึ่งจะแนะนำในภายหลัง
เราจะใช้ตัวแปร search_args
เพื่อขับเคลื่อนจุดการกำหนดค่าสำหรับ API ออบเจ็กต์ยังใช้กฎ PowerTrack ที่ถูกต้องและมีตัวเลือกในการตัดการค้นหาเมื่อถึงขีดจำกัดทั้งจำนวนทวีตและการเรียก API
เราจะใช้ฟังก์ชัน collect_results
ซึ่งมีพารามิเตอร์ 3 ตัว
สำหรับตัวอย่างที่เหลือ โปรดเปลี่ยน args เป็นพรีเมียมหรือองค์กร ขึ้นอยู่กับการใช้งานของคุณ
มาดูกันว่ามันจะเป็นอย่างไร:
from searchtweets import collect_results
tweets = collect_results ( rule ,
max_results = 100 ,
result_stream_args = enterprise_search_args ) # change this if you need to
ตามค่าเริ่มต้น ทวีตเพย์โหลดจะถูกแยกวิเคราะห์เป็นวัตถุ Tweet
อย่างเกียจคร้าน คุณลักษณะทวีตจำนวนมากมีให้บริการโดยตรง เช่น:
[ print ( tweet . all_text , end = ' n n ' ) for tweet in tweets [ 0 : 10 ]];
เจย์-ซี & บียอนเซ่นั่งทานอาหารเย็นตรงข้ามเราในคืนนี้ และมีอยู่ช่วงหนึ่งที่ฉันได้สบตากับบียอนเซ่ แขนขาของฉันกลายเป็นเจลโล่ และฉันไม่สามารถสร้างประโยคที่สอดคล้องกันได้อีกต่อไป ข้าพเจ้าได้เห็นพระเนตรของพระผู้เป็นเจ้า บียอนเซ่กับมันไม่ใกล้เคียงกัน https://t.co/UdOU9oUtuW อย่างที่คุณเดาได้ .. สัญญาณของBeyoncéจะเป็นสิ่งที่น่ารังเกียจสำหรับฉันเสมอ เมื่อบียอนเซ่รับเลี้ยงสุนัข ?? https://t.co/U571HyLG4F เดี๋ยวนะ คุณไม่สามารถทำแบบนั้นกับบียอนเซ่ได้ https://t.co/3p14DocGqA ทำไมคุณถึงใช้ GIF ของ Rihanna และ Beyoncé เพื่อโปรโมตรายการต่อไป ในเมื่อคุณปล่อยให้ Bey เสียรางวัลเดียวกับที่เธอสมควรได้รับถึง 3 ครั้ง และปล่อยให้ Rihanna ออกไปโดยไม่มีอะไรเลยนอกจากเสื้อผ้าบนหลังของเธอ? https://t.co/w38QpH0wma 30) ใครๆ ก็บอกคุณว่าคุณหน้าเหมือนบียอนเซ่ https://t.co/Vo4Z7bfSCi Mi Beyoncéชอบ https://t.co/f9Jp600l2B บียอนเซ่ necesita เวอร์ชั่นเอสโต Que diosa @TiniStoessel https://t.co/gadVJbehQZ Joanne Pearce กำลังเล่น IF I WAS A BOY - BEYONCE.mp3 โดย ! ฉันอยากจะเห็นฟินสตาของบียอนเซ่ก่อนที่ฉันจะตาย
[ print ( tweet . created_at_datetime ) for tweet in tweets [ 0 : 10 ]];
2018-01-17 00:08:50 2018-01-17 00:08:49 2018-01-17 00:08:44 2018-01-17 00:08:42 2018-01-17 00:08:42 2018-01-17 00:08:42 2018-01-17 00:08:40 2018-01-17 00:08:38 2018-01-17 00:08:37 2018-01-17 00:08:37
[ print ( tweet . generator . get ( "name" )) for tweet in tweets [ 0 : 10 ]];
ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับไอโฟน ทวิตเตอร์สำหรับแอนดรอยด์ ทวิตเตอร์สำหรับไอโฟน แอร์ไทม์โปร ทวิตเตอร์สำหรับไอโฟน
Voila เรามีทวีตบ้าง สำหรับสภาพแวดล้อมแบบโต้ตอบและกรณีอื่นๆ ที่คุณไม่สนใจเกี่ยวกับการรวบรวมข้อมูลของคุณในการโหลดครั้งเดียวหรือไม่จำเป็นต้องดำเนินการกับการสตรีมทวีตหรือการนับโดยตรง ฉันขอแนะนำให้ใช้ฟังก์ชันอำนวยความสะดวกนี้
ออบเจ็กต์ ResultStream จะขับเคลื่อนโดย search_args
และใช้กฎและพารามิเตอร์การกำหนดค่าอื่นๆ รวมถึงการหยุดจำนวนหน้าอย่างถาวรเพื่อจำกัดการใช้งานการเรียก API ของคุณ
rs = ResultStream ( rule_payload = rule ,
max_results = 500 ,
max_pages = 1 ,
** premium_search_args )
print ( rs )
สตรีมผลลัพธ์: - "ชื่อผู้ใช้":null, "จุดสิ้นสุด":https://api.twitter.com/1.1/twitters/search/30day/dev.json", "rule_payload":{ "แบบสอบถาม":บียอนเซ่ ", "ผลลัพธ์สูงสุด":100 - "ทวีตฟาย":จริง, "max_results":500 -
มีฟังก์ชัน .stream
ที่จัดการคำขอและการแบ่งหน้าสำหรับการสืบค้นที่กำหนดได้อย่างราบรื่น มันส่งคืนตัวสร้างและเพื่อคว้า 500 ทวีตของเราที่กล่าวถึง beyonce
เราสามารถทำได้:
tweets = list ( rs . stream ())
ทวีตจะถูกแยกวิเคราะห์อย่างเกียจคร้านโดยใช้ Tweet Parser ของเรา ดังนั้นข้อมูลทวีตจึงสามารถดึงข้อมูลได้อย่างง่ายดายมาก
# using unidecode to prevent emoji/accents printing
[ print ( tweet . all_text ) for tweet in tweets [ 0 : 10 ]];
เจนเต้โซคอร์โร kkkkkkkkkk BEYONCE https://t.co/kJ9zubvKuf เจย์-ซี & บียอนเซ่นั่งทานอาหารเย็นตรงข้ามเราในคืนนี้ และมีอยู่ช่วงหนึ่งที่ฉันได้สบตากับบียอนเซ่ แขนขาของฉันกลายเป็นเจลโล่ และฉันไม่สามารถสร้างประโยคที่สอดคล้องกันได้อีกต่อไป ข้าพเจ้าได้เห็นพระเนตรของพระผู้เป็นเจ้า บียอนเซ่กับมันไม่ใกล้เคียงกัน https://t.co/UdOU9oUtuW อย่างที่คุณเดาได้ .. สัญญาณของBeyoncéจะเป็นสิ่งที่น่ารังเกียจสำหรับฉันเสมอ เมื่อบียอนเซ่รับเลี้ยงสุนัข ?? https://t.co/U571HyLG4F เดี๋ยวนะ คุณไม่สามารถทำแบบนั้นกับบียอนเซ่ได้ https://t.co/3p14DocGqA ทำไมคุณถึงใช้ GIF ของ Rihanna และ Beyoncé เพื่อโปรโมตรายการต่อไป ในเมื่อคุณปล่อยให้ Bey เสียรางวัลเดียวกับที่เธอสมควรได้รับถึง 3 ครั้ง และปล่อยให้ Rihanna ออกไปโดยไม่มีอะไรเลยนอกจากเสื้อผ้าบนหลังของเธอ? https://t.co/w38QpH0wma 30) ใครๆ ก็บอกคุณว่าคุณหน้าเหมือนบียอนเซ่ https://t.co/Vo4Z7bfSCi Mi Beyoncéชอบ https://t.co/f9Jp600l2B บียอนเซ่ necesita เวอร์ชั่นเอสโต Que diosa @TiniStoessel https://t.co/gadVJbehQZ Joanne Pearce กำลังเล่น IF I WAS A BOY - BEYONCE.mp3 โดย !
นอกจากนี้เรายังสามารถใช้ปลายทาง Search API Counts เพื่อรับจำนวนทวีตที่ตรงกับกฎของเรา คำขอแต่ละรายการจะส่งคืนผลลัพธ์สูงสุด 30 วัน และคำขอการนับแต่ละรายการสามารถทำได้เป็นรายนาที รายชั่วโมง หรือรายวัน ออบเจ็กต์ ResultStream
ที่ซ่อนอยู่จะจัดการการแปลงจุดสิ้นสุดของคุณเป็นจุดสิ้นสุดการนับ และคุณต้องระบุอาร์กิวเมนต์ count_bucket
เมื่อสร้างกฎเพื่อใช้งาน
กระบวนการนี้คล้ายกับการดึงทวีตมาก แต่มีข้อแตกต่างเล็กน้อยบางประการ
ข้อแม้ - สภาพแวดล้อมแซนด์บ็อกซ์ระดับพรีเมียมไม่มีสิทธิ์เข้าถึงจุดสิ้นสุดการนับจำนวน Search API
count_rule = gen_rule_payload ( "beyonce" , count_bucket = "day" )
counts = collect_results ( count_rule , result_stream_args = enterprise_search_args )
ผลลัพธ์ของเราค่อนข้างตรงไปตรงมาและสามารถใช้งานได้อย่างรวดเร็ว
counts
[{'count': 366, 'ช่วงเวลา': '201801170000'}, {'นับ': 44580, 'ช่วงเวลา': '201801160000'}, {'นับ': 61932, 'ช่วงเวลา': '201801150000'}, {'นับ': 59678, 'ช่วงเวลา': '201801140000'}, {'นับ': 44014, 'ช่วงเวลา': '201801130000'}, {'นับ': 46607, 'ช่วงเวลา': '201801120000'}, {'นับ': 41523, 'ช่วงเวลา': '201801110000'}, {'นับ': 47056, 'ช่วงเวลา': '201801100000'}, {'นับ': 65506, 'ช่วงเวลา': '201801090000'}, {'นับ': 95251, 'ช่วงเวลา': '201801080000'}, {'นับ': 162883, 'ช่วงเวลา': '201801070000'}, {'นับ': 106344, 'ช่วงเวลา': '201801060000'}, {'นับ': 93542, 'ช่วงเวลา': '201801050000'}, {'นับ': 110415, 'ช่วงเวลา': '201801040000'}, {'นับ': 127523, 'ช่วงเวลา': '201801030000'}, {'นับ': 131952, 'ช่วงเวลา': '201801020000'}, {'นับ': 176157, 'ช่วงเวลา': '201801010000'}, {'นับ': 57229, 'ช่วงเวลา': '201712310000'}, {'นับ': 72277, 'ช่วงเวลา': '201712300000'}, {'นับ': 72051, 'ช่วงเวลา': '201712290000'}, {'นับ': 76371, 'ช่วงเวลา': '201712280000'}, {'นับ': 61578, 'ช่วงเวลา': '201712270000'}, {'นับ': 55118, 'ช่วงเวลา': '201712260000'}, {'นับ': 59115, 'ช่วงเวลา': '201712250000'}, {'นับ': 106219, 'ช่วงเวลา': '201712240000'}, {'นับ': 114732, 'ช่วงเวลา': '201712230000'}, {'นับ': 73327, 'ช่วงเวลา': '201712220000'}, {'นับ': 89171, 'ช่วงเวลา': '201712210000'}, {'นับ': 192381, 'ช่วงเวลา': '201712200000'}, {'นับ': 85554, 'ช่วงเวลา': '201712190000'}, {'นับ': 57829, 'ช่วงเวลา': '201712180000'}]
โปรดทราบว่าการดำเนินการนี้จะใช้ได้กับตัวเลือกการค้นหาการเก็บถาวรแบบเต็ม ซึ่งสามารถใช้ได้สำหรับบัญชีของฉันผ่านตัวเลือกระดับองค์กรเท่านั้น การค้นหาที่เก็บถาวรแบบเต็มอาจต้องใช้จุดสิ้นสุดหรือวิธีการเข้าถึงอื่น โปรดดูคอนโซลนักพัฒนาซอฟต์แวร์ของคุณสำหรับรายละเอียด
มาสร้างกฎใหม่และผ่านวันที่ในครั้งนี้
gen_rule_payload
ใช้เวลาประทับเวลาของแบบฟอร์มต่อไปนี้:
YYYYmmDDHHMM
YYYY-mm-DD
(ซึ่งจะแปลงเป็นเวลาเที่ยงคืน UTC (00:00)YYYY-mm-DD HH:MM
YYYY-mm-DDTHH:MM
หมายเหตุ - ทวีตทั้งหมดจะถูกจัดเก็บตามเวลา UTC
rule = gen_rule_payload ( "from:jack" ,
from_date = "2017-09-01" , #UTC 2017-09-01 00:00
to_date = "2017-10-30" , #UTC 2017-10-30 00:00
results_per_call = 500 )
print ( rule )
{"query": "from:jack" "maxResults":500, "toDate": "201710300000" "fromDate": "201709010000"}
tweets = collect_results ( rule , max_results = 500 , result_stream_args = enterprise_search_args )
[ print ( tweet . all_text ) for tweet in tweets [ 0 : 10 ]];
ความชัดเจนมากขึ้นเกี่ยวกับนโยบายและการบังคับใช้ข้อมูลส่วนตัวของเรา ทำงานเพื่อสร้างบริบทโดยตรงให้กับผลิตภัณฑ์ให้มากที่สุด https://t.co/IrwBexPrBA เพื่อให้นโยบายความเป็นส่วนตัวของเราชัดเจนยิ่งขึ้น เราได้เพิ่มตัวอย่างเฉพาะของสิ่งที่เป็น/ไม่ใช่การละเมิดและข้อมูลเชิงลึกเกี่ยวกับสิ่งที่เราจำเป็นต้องลบเนื้อหาประเภทนี้ออกจากบริการ https://t.co/NGx5hh2tTQ เปิดตัวนโยบายกลุ่มความรุนแรงและรูปภาพ/สัญลักษณ์แสดงความเกลียดชังในวันที่ 22 พฤศจิกายน https://t.co/NaWuBPxyO5 ตอนนี้เราจะเปิดตัวนโยบายเกี่ยวกับกลุ่มความรุนแรงและภาพที่แสดงความเกลียดชังและสัญลักษณ์แสดงความเกลียดชังในวันที่ 22 พ.ย. ในระหว่างกระบวนการพัฒนา เราได้รับความคิดเห็นอันมีค่าที่เรากำลังดำเนินการก่อนที่จะเผยแพร่และบังคับใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการพัฒนานโยบายของเราได้ที่นี่ ? https://t.co/wx3EeH39BI @WillStick @lizkelley สุขสันต์วันเกิดลิซ! การโฆษณานอกระบบจากบัญชีทั้งหมดที่ Russia Today (RT) และ Sputnik เป็นเจ้าของ เรากำลังบริจาครายได้ที่คาดการณ์ไว้ทั้งหมด ($1.9 มม.) เพื่อสนับสนุนการวิจัยภายนอกเกี่ยวกับการใช้ Twitter ในการเลือกตั้ง รวมถึงการใช้ระบบอัตโนมัติที่เป็นอันตรายและข้อมูลที่ไม่ถูกต้อง https://t.co/zIxfqqXCZr @TMFJMo @anthonynoto ขอบคุณครับ @gasca @stratechery @Lefsetz จดหมาย @gasca @stratechery การสังเกตรายวันของ Bridgewater ใช่!!!! ❤️❤️❤️❤️ #davechappelle https://t.co/ybSGNrQpYF @ndimichino บางครั้ง การตั้งค่าที่ @CampFlogGnaw https://t.co/nVq8QjkKsf
rule = gen_rule_payload ( "from:jack" ,
from_date = "2017-09-20" ,
to_date = "2017-10-30" ,
count_bucket = "day" ,
results_per_call = 500 )
print ( rule )
{"query": "from:jack", "toDate": "201710300000", "fromDate": "201709200000", "bucket": วัน"}
counts = collect_results ( rule , max_results = 500 , result_stream_args = enterprise_search_args )
[ print ( c ) for c in counts ];
{'ระยะเวลา': '201710290000', 'นับ': 0} {'timePeriod': '201710280000', 'นับ': 0} {'timePeriod': '201710270000', 'นับ': 3} {'ระยะเวลา': '201710260000', 'นับ': 6} {'ระยะเวลา': '201710250000', 'นับ': 4} {'ระยะเวลา': '201710240000', 'นับ': 4} {'ระยะเวลา': '201710230000', 'นับ': 0} {'timePeriod': '201710220000', 'นับ': 0} {'timePeriod': '201710210000', 'นับ': 3} {'ระยะเวลา': '201710200000', 'นับ': 2} {'ระยะเวลา': '201710190000', 'นับ': 1} {'ระยะเวลา': '201710180000', 'นับ': 6} {'ระยะเวลา': '201710170000', 'นับ': 2} {'ระยะเวลา': '201710160000', 'นับ': 2} {'ระยะเวลา': '201710150000', 'นับ': 1} {'ระยะเวลา': '201710140000', 'นับ': 64} {'ระยะเวลา': '201710130000', 'นับ': 3} {'ระยะเวลา': '201710120000', 'นับ': 4} {'ระยะเวลา': '201710110000', 'นับ': 8} {'ระยะเวลา': '201710100000', 'นับ': 4} {'ระยะเวลา': '201710090000', 'นับ': 1} {'ระยะเวลา': '201710080000', 'นับ': 0} {'ระยะเวลา': '201710070000', 'นับ': 0} {'ระยะเวลา': '201710060000', 'นับ': 1} {'ระยะเวลา': '201710050000', 'นับ': 3} {'ระยะเวลา': '201710040000', 'นับ': 5} {'ระยะเวลา': '201710030000', 'นับ': 8} {'ระยะเวลา': '201710020000', 'นับ': 5} {'ระยะเวลา': '201710010000', 'นับ': 0} {'ระยะเวลา': '201709300000', 'นับ': 0} {'timePeriod': '201709290000', 'นับ': 0} {'timePeriod': '201709280000', 'นับ': 9} {'timePeriod': '201709270000', 'นับ': 41} {'timePeriod': '201709260000', 'นับ': 13} {'ระยะเวลา': '201709250000', 'นับ': 6} {'timePeriod': '201709240000', 'นับ': 7} {'timePeriod': '201709230000', 'นับ': 3} {'timePeriod': '201709220000', 'นับ': 0} {'timePeriod': '201709210000', 'นับ': 1} {'ระยะเวลา': '201709200000', 'นับ': 7}
การสนับสนุนใด ๆ ควรเป็นไปตามรูปแบบต่อไปนี้:
git checkout -b my_new_feature
searchtweets/_version.py
เพื่อสะท้อนถึงการเปลี่ยนแปลงของคุณ เราใช้การกำหนดเวอร์ชันแบบ Semantic ดังนั้นการปรับปรุงอย่างต่อเนื่องควรเพิ่มเวอร์ชันรอง เช่น 1.5.0 -> 1.6.0
และการแก้ไขข้อบกพร่องจะเพิ่มเวอร์ชันล่าสุด 1.6.0 -> 1.6.1
หลังจากยอมรับกระบวนการขอดึงแล้ว ผู้ดูแลแพ็คเกจจะจัดการเอกสารประกอบการสร้างและการแจกจ่ายให้กับ Pypi
สำหรับการอ้างอิง การแจกจ่ายไปยัง Pypi ทำได้โดยใช้คำสั่งต่อไปนี้ ซึ่งรันจากไดเร็กทอรีรากใน repo:
python setup.py bdist_wheel
python setup.py sdist
twine upload dist/ *
วิธีสร้างเอกสาร:
การสร้างเอกสารต้องใช้แพ็คเกจสฟิงซ์สองสามชุดเพื่อสร้างเว็บเพจ:
pip install sphinx
pip install sphinx_bootstrap_theme
pip install sphinxcontrib-napoleon
จากนั้น (เมื่อการเปลี่ยนแปลงของคุณมุ่งมั่นที่จะเป็นผู้เชี่ยวชาญ) คุณควรจะสามารถเรียกใช้สคริปต์ bash ที่สร้างเอกสารและทำตามคำแนะนำ:
bash build_sphinx_docs.sh master searchtweets
โปรดทราบว่า README นี้ก็ถูกสร้างขึ้นเช่นกัน ดังนั้นหลังจากการเปลี่ยนแปลง README ใดๆ คุณจะต้องสร้าง README ขึ้นมาใหม่ (คุณต้องใช้ pandoc เวอร์ชัน 2.1+ สำหรับสิ่งนี้) และยอมรับผลลัพธ์:
bash make_readme.sh