Titik akhir pencarian Twitter v2 kini menyertakan titik akhir 'penghitungan' yang menampilkan total rangkaian waktu dari Tweet yang cocok.
Proyek ini berfungsi sebagai pembungkus API pencarian premium dan perusahaan Twitter, menyediakan utilitas baris perintah dan perpustakaan Python. Dokumen cantik dapat dilihat di sini.
jq
). Perpustakaan searchtweets
ada di Pypi:
pip install searchtweets
Atau Anda dapat menginstal versi pengembangan secara lokal melalui
git clone https://github.com/twitterdev/search-tweets-python
cd search-tweets-python
pip install -e .
API Penelusuran premium dan perusahaan menggunakan metode autentikasi yang berbeda dan kami berupaya menyediakan cara yang lancar untuk menangani autentikasi bagi semua pelanggan. Kami tahu kredensial bisa jadi rumit atau mengganggu - harap baca ini secara keseluruhan.
Klien premium akan memerlukan bidang bearer_token
dan endpoint
; Klien perusahaan memerlukan username
, password
, dan endpoint
. Jika Anda tidak menentukan account_type
, kami akan mencoba membedakan jenis akun dan memberikan peringatan tentang perilaku ini.
Untuk produk pencarian premium, kami menggunakan autentikasi khusus aplikasi dan token pembawa tidak dikirimkan dengan waktu kedaluwarsa. Anda dapat memberikan: - kunci dan rahasia aplikasi Anda (perpustakaan akan menangani otentikasi token pembawa) - token pembawa yang Anda dapatkan sendiri
Banyak pengembang mungkin menganggap penyediaan kunci dan rahasia aplikasi Anda lebih mudah dan membiarkan perpustakaan ini mengelola pembuatan token pembawa untuk Anda. Silakan lihat di sini untuk ikhtisar metode autentikasi premium.
Kami mendukung metode berbasis file YAML dan variabel lingkungan untuk menyimpan kredensial, dan memberikan penanganan yang fleksibel dengan default yang masuk akal.
Untuk pelanggan premium, file kredensial paling sederhana akan terlihat seperti ini:
search_tweets_api :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
consumer_key : <CONSUMER_KEY>
consumer_secret : <CONSUMER_SECRET>
Untuk pelanggan perusahaan, file kredensial paling sederhana akan terlihat seperti ini:
search_tweets_api :
account_type : enterprise
endpoint : <FULL_URL_OF_ENDPOINT>
username : <USERNAME>
password : <PW>
Secara default, perpustakaan ini mengharapkan file ini di "~/.twitter_keys.yaml"
, tetapi Anda dapat meneruskan lokasi yang relevan sesuai kebutuhan, baik dengan tanda --credential-file
untuk aplikasi baris perintah atau seperti yang ditunjukkan di bawah ini dengan Python program.
Kedua contoh di atas tidak memerlukan argumen baris perintah khusus atau argumen dalam program. Metode penguraian kredensial, kecuali ditentukan lain, akan mencari kunci YAML yang disebut search_tweets_api
.
Untuk pengembang yang memiliki beberapa titik akhir dan/atau produk pencarian, Anda dapat menyimpan semua kredensial dalam file yang sama dan menentukan kunci spesifik untuk digunakan. --credential-file-key
menentukan perilaku ini di aplikasi baris perintah. Contoh:
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>
Jika Anda ingin atau perlu meneruskan kredensial melalui variabel lingkungan, Anda dapat mengatur variabel berikut yang sesuai untuk produk Anda:
ekspor SEARCHTWEETS_ENDPOINT= ekspor SEARCHTWEETS_USERNAME= ekspor SEARCHTWEETS_PASSWORD= ekspor SEARCHTWEETS_BEARER_TOKEN= ekspor SEARCHTWEETS_ACCOUNT_TYPE= ekspor SEARCHTWEETS_CONSUMER_KEY= ekspor SEARCHTWEETS_CONSUMER_SECRET=
Fungsi load_credentials
akan mencoba menemukan variabel-variabel ini jika tidak dapat memuat bidang dari file YAML, dan fungsi tersebut akan menimpa kredensial apa pun dari file YAML yang ada sebagai variabel lingkungan jika sudah diurai. Perilaku ini dapat diubah dengan menyetel parameter load_credentials
env_overwrite
ke False
.
Sel berikut menunjukkan penanganan kredensial di perpustakaan Python.
from searchtweets import load_credentials
load_credentials ( filename = "./search_tweets_creds_example.yaml" ,
yaml_key = "search_tweets_ent_example" ,
env_overwrite = False )
{'nama pengguna': '<MY_USERNAME>', 'kata sandi': '<MY_PASSWORD>', 'titik akhir': '<MY_ENDPOINT>'}
load_credentials ( filename = "./search_tweets_creds_example.yaml" ,
yaml_key = "search_tweets_premium_example" ,
env_overwrite = False )
{'pembawa_token': '<A_VERY_LONG_MAGIC_STRING>', 'titik akhir': 'https://api.twitter.com/1.1/tweets/search/30day/dev.json', 'extra_headers_dict': Tidak ada}
Jika kita mengatur variabel lingkungan, program akan mencarinya terlepas dari validitas atau keberadaan file 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" )
tidak dapat membaca file Nothing_here.yaml Terjadi kesalahan saat mengurai file YAML; mencari variabel lingkungan yang valid
{'nama pengguna': '<ENV_USERNAME>', 'kata sandi': '<ENV_PW>', 'titik akhir': '<https://endpoint>'}
bendera:
--credential-file <FILENAME>
--credential-file-key <KEY>
--env-overwrite
digunakan untuk mengontrol perilaku kredensial dari aplikasi baris perintah.
Perpustakaan tersebut mencakup aplikasi, search_tweets.py
, yang menyediakan akses cepat ke Tweet. Saat Anda menggunakan pip
untuk menginstal paket ini, search_tweets.py
diinstal secara global. File tersebut terletak di direktori tools/
bagi mereka yang ingin menjalankannya secara lokal.
Perhatikan bahwa tanda --results-per-call
menentukan argumen ke API ( maxResults
, hasil yang dikembalikan per PANGGILAN), bukan sebagai angka maksimal untuk jumlah hasil yang dikembalikan dari program ini. Argumen --max-results
menentukan jumlah maksimum hasil yang dihasilkan dari panggilan tertentu. Semua contoh mengasumsikan bahwa kredensial Anda disiapkan dengan benar di lokasi default - .twitter_keys.yaml
atau di variabel lingkungan.
Streaming hasil json ke stdout tanpa menyimpan
search_tweets.py
--max-results 1000
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--print-stream
Streaming hasil json ke stdout dan simpan ke file
search_tweets.py
--max-results 1000
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--filename-prefix beyonce_geo
--print-stream
Simpan ke file tanpa keluaran
search_tweets.py
--max-results 100
--results-per-call 100
--filter-rule " beyonce has:hashtags "
--filename-prefix beyonce_geo
--no-print-stream
Satu atau lebih header kustom dapat ditentukan dari baris perintah, menggunakan argumen --extra-headers
dan string berformat JSON yang mewakili kamus header tambahan:
search_tweets.py
--filter-rule " beyonce has:hashtags "
--extra-headers ' {"<MY_HEADER_KEY>":"<MY_HEADER_VALUE>"} '
Opsi dapat diteruskan melalui file konfigurasi (ini atau YAML). File contoh dapat ditemukan di file tools/api_config_example.config
atau ./tools/api_yaml_example.yaml
, yang mungkin terlihat seperti ini:
[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
Atau ini:
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
Header khusus dapat ditentukan dalam file konfigurasi, di bawah kunci kredensial tertentu:
search_tweets_api :
account_type : premium
endpoint : <FULL_URL_OF_ENDPOINT>
username : <USERNAME>
password : <PW>
extra_headers :
<MY_HEADER_KEY> : <MY_HEADER_VALUE>
Saat menggunakan file konfigurasi bersama dengan utilitas baris perintah, Anda perlu menentukan file konfigurasi melalui parameter --config-file
. Argumen baris perintah tambahan akan ditambahkan ke argumen file konfigurasi atau menimpa argumen file konfigurasi jika keduanya ditentukan dan ada.
Contoh:
pencarian_tweets.py --config-file myapiconfig.config --tidak ada-aliran cetak
Opsi lengkap tercantum di bawah ini:
$ pencarian_tweets.py -h penggunaan: search_tweets.py [-h] [--credential-file CREDENTIAL_FILE] [--kunci-file-kredensial CREDENTIAL_YAML_KEY] [--env-timpa ENV_OVERWRITE] [--config-file CONFIG_FILENAME] [--jenis akun {premium,perusahaan}] [--hitung-keranjang COUNT_BUCKET] [--tanggal-mulai FROM_DATE] [--tanggal-akhir waktu TO_DATE] [--aturan filter PT_RULE] [--hasil-per-panggilan RESULTS_PER_CALL] [--hasil-maks MAX_RESULTS] [--halaman maksimal MAX_PAGES] [--hasil-per-file RESULTS_PER_FILE] [--awalan nama file FILENAME_PREFIX] [--tidak ada-aliran cetak] [--aliran cetak] [--header ekstra EXTRA_HEADERS] [--debug] argumen opsional: -h, --help tampilkan pesan bantuan ini dan keluar --file kredensial CREDENTIAL_FILE Lokasi file yaml yang digunakan untuk menyimpan file kredensial. --kunci-file-kredensial CREDENTIAL_YAML_KEY kunci dalam file kredensial yang digunakan untuk sesi ini kredensial. Defaultnya adalah search_tweets_api --env-timpa ENV_OVERWRITE Timpa kredensial yang diurai YAML dengan kumpulan apa pun variabel lingkungan. Lihat dokumen API atau readme untuk detail. --config-file CONFIG_FILENAME file konfigurasi dengan semua parameter. Jauh, lebih mudah untuk dilakukan gunakan daripada versi argumen baris perintah., Jika valid file ditemukan, semua argumen akan diisi, dari sana. Argumen baris perintah yang tersisa, akan mengesampingkan argumen yang ditemukan di konfigurasi, file. --jenis akun {premium,perusahaan} Jenis akun yang Anda gunakan --hitungan keranjang COUNT_BUCKET Setel ini untuk membuat permintaan 'penghitungan'. Ukuran bucket untuk menghitung titik akhir. Pilihan:, hari, jam, menit. --tanggal mulaiwaktu DARI_DATE Mulai jendela tanggalwaktu, format 'YYYY-mm-DDTHH:MM' (standarnya: -30 hari) --tanggal akhirwaktu TO_DATE Jendela akhir tanggal dan waktu, format 'YYYY-mm-DDTHH:MM' (default: tanggal terkini) --filter-aturan PT_RULE Aturan filter PowerTrack (Lihat: http://support.gnip.com/c pelanggan/portal/artikel/901152-powertrack-operator) --hasil-per-panggilan RESULTS_PER_CALL Jumlah hasil yang dikembalikan per panggilan (default 100; maks 500) - sesuai dengan 'maxResults' di API. Jika membuat permintaan 'counts' dengan '--count-bucket', parameter ini diabaikan. --hasil maksimal MAX_RESULTS Jumlah maksimum Tweet atau Hitungan yang dapat dikembalikan untuk ini sesi (defaultnya 500) --maks-halaman MAX_PAGES Jumlah maksimum halaman/panggilan API yang digunakan untuk ini sidang. --hasil-per-file RESULTS_PER_FILE Tweet maksimum untuk disimpan per file. --awalan nama file FILENAME_PREFIX awalan untuk nama file tempat data tweet json akan berada tersimpan. --no-print-stream menonaktifkan streaming cetak --print-stream Cetak aliran tweet ke stdout --header ekstra EXTRA_HEADERS str berformat JSON yang mewakili dikt tambahan header permintaan --debug mencetak semua info dan pesan peringatan
Bekerja dengan API dalam program Python sangatlah mudah baik untuk klien Premium maupun Perusahaan.
Kami berasumsi bahwa kredensial berada di lokasi default, ~/.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 )
Ada fungsi yang memformat aturan API penelusuran menjadi kueri json valid yang disebut gen_rule_payload
. Ini memiliki default yang masuk akal, seperti menarik lebih banyak Tweet per panggilan daripada default 100 (tetapi perhatikan bahwa lingkungan sandbox hanya dapat memiliki maksimal 100 di sini, jadi jika Anda mendapatkan kesalahan, harap periksa ini) tidak termasuk tanggal. Membahas poin-poin penting dalam menghasilkan aturan pencarian berada di luar cakupan contoh-contoh ini; Saya mendorong Anda untuk melihat dokumen untuk mempelajari perbedaan di dalamnya, tetapi untuk saat ini mari kita lihat seperti apa aturannya.
rule = gen_rule_payload ( "beyonce" , results_per_call = 100 ) # testing with a sandbox account
print ( rule )
{"query":"melampaui","maxResults":100}
Aturan ini akan cocok dengan tweet yang memiliki beyonce
di dalamnya.
Mulai saat ini, ada dua cara untuk berinteraksi dengan API. Ada metode cepat untuk mengumpulkan sejumlah kecil Tweet ke memori yang memerlukan lebih sedikit pemikiran dan pengetahuan, dan interaksi dengan objek ResultStream
yang akan diperkenalkan nanti.
Kita akan menggunakan variabel search_args
untuk menggerakkan titik konfigurasi API. Objek ini juga menggunakan aturan PowerTrack yang valid dan memiliki opsi untuk menghentikan pencarian saat mencapai batas jumlah Tweet dan panggilan API.
Kita akan menggunakan fungsi collect_results
, yang memiliki tiga parameter.
Untuk contoh lainnya, harap ubah argumen menjadi premium atau perusahaan bergantung pada penggunaan Anda.
Mari kita lihat bagaimana kelanjutannya:
from searchtweets import collect_results
tweets = collect_results ( rule ,
max_results = 100 ,
result_stream_args = enterprise_search_args ) # change this if you need to
Secara default, muatan Tweet diurai dengan lambat menjadi objek Tweet
. Banyak sekali atribut Tweet yang tersedia secara langsung, seperti:
[ print ( tweet . all_text , end = ' n n ' ) for tweet in tweets [ 0 : 10 ]];
Jay-Z & Beyonce duduk di hadapan kami saat makan malam dan, pada satu titik, saya melakukan kontak mata dengan Beyonce. Anggota tubuhku berubah menjadi jello dan aku tidak bisa lagi membentuk kalimat yang koheren. Saya telah melihat mata Tuhan. Beyonce dan itu tidak dekat. https://t.co/UdOU9oUtuW Seperti yang bisa Anda tebak.. Tanda-tanda dari Beyonce akan selalu menjadi omong kosong saya. Kapan Beyonce mengadopsi seekor anjing ?? https://t.co/U571HyLG4F Tunggu sebentar, Anda tidak bisa melakukan itu begitu saja pada Beyonce https://t.co/3p14DocGqA Mengapa kalian terus menggunakan gif Rihanna dan Beyonce untuk mempromosikan acara tersebut padahal kalian membiarkan Bey kehilangan penghargaan yang sama yang pantas diterimanya sebanyak 3 kali dan membiarkan Rihanna pergi hanya dengan pakaian di punggungnya? https://t.co/w38QpH0wma 30) ada yang bilang kamu mirip Beyonce https://t.co/Vo4Z7bfSCi Saya favorit Beyonce https://t.co/f9Jp600l2B Beyonce memerlukan ver ini. Ini dia @TiniStoessel https://t.co/gadVJbehQZ Joanne Pearce sedang memutar IF I WAS A BOY - BEYONCE.mp3 oleh ! Aku mencoba melihat finsta beyoncé sebelum aku mati
[ print ( tweet . created_at_datetime ) for tweet in tweets [ 0 : 10 ]];
17-01-2018 00:08:50 17-01-2018 00:08:49 17-01-2018 00:08:44 17-01-2018 00:08:42 17-01-2018 00:08:42 17-01-2018 00:08:42 17-01-2018 00:08:40 17-01-2018 00:08:38 17-01-2018 00:08:37 17-01-2018 00:08:37
[ print ( tweet . generator . get ( "name" )) for tweet in tweets [ 0 : 10 ]];
Twitter untuk iPhone Twitter untuk iPhone Twitter untuk iPhone Twitter untuk iPhone Twitter untuk iPhone Twitter untuk iPhone Twitter untuk Android Twitter untuk iPhone Waktu Siaran Pro Twitter untuk iPhone
Voila, kami punya beberapa Tweet. Untuk lingkungan interaktif dan kasus lain di mana Anda tidak perlu mengumpulkan data dalam satu kali pemuatan atau tidak perlu mengoperasikan aliran Tweet atau penghitungan secara langsung, saya sarankan menggunakan fungsi praktis ini.
Objek ResultStream akan didukung oleh search_args
, dan mengambil aturan serta parameter konfigurasi lainnya, termasuk penghentian sementara jumlah halaman untuk membatasi penggunaan panggilan API Anda.
rs = ResultStream ( rule_payload = rule ,
max_results = 500 ,
max_pages = 1 ,
** premium_search_args )
print ( rs )
Aliran Hasil: { "nama pengguna": batal, "titik akhir":"https://api.twitter.com/1.1/tweets/search/30day/dev.json", "aturan_payload":{ "query":"melampaui", "Hasil maksimal":100 }, "tweetify":benar, "hasil_maks":500 }
Ada fungsi, .stream
, yang menangani permintaan dan penomoran halaman untuk kueri tertentu dengan lancar. Ini mengembalikan generator, dan untuk mengambil 500 Tweet kami yang menyebutkan beyonce
kami dapat melakukan ini:
tweets = list ( rs . stream ())
Tweet diurai dengan lambat menggunakan Tweet Parser kami, sehingga data tweet dapat diekstraksi dengan sangat mudah.
# using unidecode to prevent emoji/accents printing
[ print ( tweet . all_text ) for tweet in tweets [ 0 : 10 ]];
gente socorro kkkkkkkkkk BEYONCE https://t.co/kJ9zubvKuf Jay-Z & Beyonce duduk di hadapan kami saat makan malam dan, pada satu titik, saya melakukan kontak mata dengan Beyonce. Anggota tubuhku berubah menjadi jello dan aku tidak bisa lagi membentuk kalimat yang koheren. Saya telah melihat mata Tuhan. Beyonce dan itu tidak dekat. https://t.co/UdOU9oUtuW Seperti yang bisa Anda tebak.. Tanda-tanda dari Beyonce akan selalu menjadi omong kosong saya. Kapan Beyonce mengadopsi seekor anjing ?? https://t.co/U571HyLG4F Tunggu sebentar, Anda tidak bisa melakukan itu begitu saja pada Beyonce https://t.co/3p14DocGqA Mengapa kalian terus menggunakan gif Rihanna dan Beyonce untuk mempromosikan acara tersebut padahal kalian membiarkan Bey kehilangan penghargaan yang sama yang pantas diterimanya sebanyak 3 kali dan membiarkan Rihanna pergi hanya dengan pakaian di punggungnya? https://t.co/w38QpH0wma 30) ada yang bilang kamu mirip Beyonce https://t.co/Vo4Z7bfSCi Saya favorit Beyonce https://t.co/f9Jp600l2B Beyonce memerlukan ver ini. Ini dia @TiniStoessel https://t.co/gadVJbehQZ Joanne Pearce sedang memutar IF I WAS A BOY - BEYONCE.mp3 oleh !
Kami juga dapat menggunakan titik akhir Jumlah API Pencarian untuk mendapatkan jumlah Tweet yang sesuai dengan aturan kami. Setiap permintaan akan menghasilkan hasil hingga 30 hari , dan setiap permintaan penghitungan dapat dilakukan setiap menit, setiap jam, atau setiap hari. Objek ResultStream
yang mendasarinya akan menangani konversi titik akhir Anda menjadi titik akhir hitungan, dan Anda harus menentukan argumen count_bucket
saat membuat aturan untuk menggunakannya.
Prosesnya sangat mirip dengan mengambil Tweet, namun memiliki beberapa perbedaan kecil.
Peringatan - lingkungan sandbox premium TIDAK memiliki akses ke titik akhir penghitungan API Penelusuran.
count_rule = gen_rule_payload ( "beyonce" , count_bucket = "day" )
counts = collect_results ( count_rule , result_stream_args = enterprise_search_args )
Hasil kami cukup mudah dan dapat digunakan dengan cepat.
counts
[{'hitungan': 366, 'Periode Waktu': '201801170000'}, {'hitungan': 44580, 'Periode Waktu': '201801160000'}, {'hitungan': 61932, 'Periode Waktu': '201801150000'}, {'hitungan': 59678, 'Periode Waktu': '201801140000'}, {'hitungan': 44014, 'Periode Waktu': '201801130000'}, {'hitungan': 46607, 'Periode Waktu': '201801120000'}, {'hitungan': 41523, 'Periode Waktu': '201801110000'}, {'hitungan': 47056, 'Periode Waktu': '201801100000'}, {'hitungan': 65506, 'Periode Waktu': '201801090000'}, {'hitungan': 95251, 'Periode Waktu': '201801080000'}, {'hitungan': 162883, 'Periode Waktu': '201801070000'}, {'hitungan': 106344, 'Periode Waktu': '201801060000'}, {'hitungan': 93542, 'Periode Waktu': '201801050000'}, {'hitungan': 110415, 'Periode Waktu': '201801040000'}, {'hitungan': 127523, 'Periode Waktu': '201801030000'}, {'hitungan': 131952, 'Periode Waktu': '201801020000'}, {'hitungan': 176157, 'Periode Waktu': '201801010000'}, {'hitungan': 57229, 'Periode Waktu': '201712310000'}, {'hitungan': 72277, 'Periode Waktu': '201712300000'}, {'hitungan': 72051, 'Periode Waktu': '201712290000'}, {'hitungan': 76371, 'Periode Waktu': '201712280000'}, {'hitungan': 61578, 'Periode Waktu': '201712270000'}, {'hitungan': 55118, 'Periode Waktu': '201712260000'}, {'hitungan': 59115, 'Periode Waktu': '201712250000'}, {'hitungan': 106219, 'Periode Waktu': '201712240000'}, {'hitungan': 114732, 'Periode Waktu': '201712230000'}, {'hitungan': 73327, 'Periode Waktu': '201712220000'}, {'hitungan': 89171, 'Periode Waktu': '201712210000'}, {'hitungan': 192381, 'Periode Waktu': '201712200000'}, {'hitungan': 85554, 'Periode Waktu': '201712190000'}, {'hitungan': 57829, 'Periode Waktu': '201712180000'}]
Perhatikan bahwa ini hanya akan berfungsi dengan opsi pencarian arsip lengkap , yang tersedia untuk akun saya hanya melalui opsi perusahaan. Pencarian arsip lengkap kemungkinan memerlukan titik akhir atau metode akses yang berbeda; silakan lihat konsol pengembang Anda untuk detailnya.
Mari kita membuat aturan baru dan menetapkan tanggalnya kali ini.
gen_rule_payload
mengambil stempel waktu dalam bentuk berikut:
YYYYmmDDHHMM
YYYY-mm-DD
(yang akan diubah menjadi tengah malam UTC (00:00)YYYY-mm-DD HH:MM
YYYY-mm-DDTHH:MM
Catatan - semua Tweet disimpan dalam waktu 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 ]];
Kejelasan lebih lanjut mengenai kebijakan dan penegakan informasi pribadi kami. Bekerja untuk membangun sebanyak mungkin konteks langsung ke dalam produk https://t.co/IrwBexPrBA Untuk memberikan kejelasan lebih lanjut mengenai kebijakan informasi pribadi kami, kami telah menambahkan contoh spesifik tentang apa yang merupakan/bukan pelanggaran dan wawasan tentang apa yang kami perlukan untuk menghapus jenis konten ini dari layanan. https://t.co/NGx5hh2tTQ Meluncurkan kebijakan kelompok kekerasan dan gambar/simbol kebencian pada 22 November https://t.co/NaWuBPxyO5 Kami sekarang akan meluncurkan kebijakan kami mengenai kelompok kekerasan dan gambar kebencian serta simbol kebencian pada tanggal 22 November. Selama proses pengembangan, kami menerima masukan berharga yang kami terapkan sebelum kebijakan ini dipublikasikan dan ditegakkan. Lihat lebih lanjut proses pengembangan kebijakan kami di sini? https://t.co/wx3EeH39BI @WillStick @lizkelley Selamat ulang tahun Liz! Iklan off-boarding dari semua akun milik Russia Today (RT) dan Sputnik. Kami mendonasikan seluruh pendapatan yang diproyeksikan ($1,9 juta) untuk mendukung penelitian eksternal mengenai penggunaan Twitter dalam pemilu, termasuk penggunaan otomatisasi berbahaya dan misinformasi. https://t.co/zIxfqqXCZr @TMFJMo @anthonynoto Terima kasih @gasca @stratechery @Lefsetz surat @gasca @stratechery Bridgewater Pengamatan Harian Ya!!!! ❤️❤️❤️❤️ #davechappelle https://t.co/ybSGNrQpYF @ndimichino Kadang-kadang Menyiapkan di @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":"day"}
counts = collect_results ( rule , max_results = 500 , result_stream_args = enterprise_search_args )
[ print ( c ) for c in counts ];
{'Periode Waktu': '201710290000', 'hitungan': 0} {'Periode Waktu': '201710280000', 'hitungan': 0} {'Periode Waktu': '201710270000', 'hitungan': 3} {'Periode Waktu': '201710260000', 'hitungan': 6} {'Periode Waktu': '201710250000', 'hitungan': 4} {'Periode Waktu': '201710240000', 'hitungan': 4} {'Periode Waktu': '201710230000', 'hitungan': 0} {'Periode Waktu': '201710220000', 'hitungan': 0} {'Periode Waktu': '201710210000', 'hitungan': 3} {'Periode Waktu': '201710200000', 'hitungan': 2} {'Periode Waktu': '201710190000', 'hitungan': 1} {'Periode Waktu': '201710180000', 'hitungan': 6} {'Periode Waktu': '201710170000', 'hitungan': 2} {'Periode Waktu': '201710160000', 'hitungan': 2} {'Periode Waktu': '201710150000', 'hitungan': 1} {'Periode Waktu': '201710140000', 'hitungan': 64} {'Periode Waktu': '201710130000', 'hitungan': 3} {'Periode Waktu': '201710120000', 'hitungan': 4} {'Periode Waktu': '201710110000', 'hitungan': 8} {'Periode Waktu': '201710100000', 'hitungan': 4} {'Periode Waktu': '201710090000', 'hitungan': 1} {'Periode Waktu': '201710080000', 'hitungan': 0} {'Periode Waktu': '201710070000', 'hitungan': 0} {'Periode Waktu': '201710060000', 'hitungan': 1} {'Periode Waktu': '201710050000', 'hitungan': 3} {'Periode Waktu': '201710040000', 'hitungan': 5} {'Periode Waktu': '201710030000', 'hitungan': 8} {'Periode Waktu': '201710020000', 'hitungan': 5} {'Periode Waktu': '201710010000', 'hitungan': 0} {'Periode Waktu': '201709300000', 'hitungan': 0} {'Periode Waktu': '201709290000', 'hitungan': 0} {'Periode Waktu': '201709280000', 'hitungan': 9} {'Periode Waktu': '201709270000', 'hitungan': 41} {'Periode Waktu': '201709260000', 'hitungan': 13} {'Periode Waktu': '201709250000', 'hitungan': 6} {'Periode Waktu': '201709240000', 'hitungan': 7} {'Periode Waktu': '201709230000', 'hitungan': 3} {'Periode Waktu': '201709220000', 'hitungan': 0} {'Periode Waktu': '201709210000', 'hitungan': 1} {'Periode Waktu': '201709200000', 'hitungan': 7}
Kontribusi apa pun harus mengikuti pola berikut:
git checkout -b my_new_feature
searchtweets/_version.py
untuk mencerminkan perubahan Anda. Kami menggunakan Versi Semantik, jadi penyempurnaan non-breaking harus menambah versi minor, misalnya 1.5.0 -> 1.6.0
, dan perbaikan bug akan menambah versi terakhir, 1.6.0 -> 1.6.1
.Setelah proses pull request diterima, pengelola paket akan menangani dokumentasi bangunan dan distribusi ke Pypi.
Sebagai referensi, pendistribusian ke Pypi dilakukan dengan perintah berikut, dijalankan dari direktori root di repo:
python setup.py bdist_wheel
python setup.py sdist
twine upload dist/ *
Cara membuat dokumentasi:
Membangun dokumentasi memerlukan beberapa paket Sphinx untuk membangun halaman web:
pip install sphinx
pip install sphinx_bootstrap_theme
pip install sphinxcontrib-napoleon
Kemudian (setelah perubahan Anda diterapkan ke master) Anda seharusnya dapat menjalankan skrip bash yang menghasilkan dokumentasi dan ikuti instruksinya:
bash build_sphinx_docs.sh master searchtweets
Perhatikan bahwa README ini juga dibuat, jadi setelah perubahan README apa pun, Anda harus membuat ulang README (Anda memerlukan pandoc versi 2.1+ untuk ini) dan mengkomit hasilnya:
bash make_readme.sh