Pengaturan paling sederhana pada Windows untuk mengirim permintaan HTTP, mendapatkan dan menerapkan regex ke respons, dan menulis kecocokan untuk file output

4

Saya ingin menulis skrip yang mencatat ukuran antrian review penutupan suara di SO (saat ini ~ 95.5k), pemungutan suara hanya beberapa kali dalam satu jam, sehingga saya bisa merencanakan tren umum. Saya tahu apa yang akan saya lakukan mengenai penguraian, yaitu diberi bagian berikut dari respons HTTP,

<div class="dashboard-num" title="95,508">95.5k</div>

Saya akan menerapkan regex

<div\s+class="dashboard-num"\s+title="([^"]+)

dan dibagi dengan \Ddan meledak array untuk hanya menyisakan angka, atau sesuatu yang serupa. (Ya, The Pony, He Comes , tapi ini adalah pekerjaan yang cepat dan kotor di mana saya tidak berharap HTML Stack Overflow berubah.)

Saat ini saya tidak memiliki pengaturan UNIX / Linux, kalau tidak saya akan melempar sesuatu menggunakan cron, cURL, dan Perl (atau sed atau awk jika saya merasa cukup berani). Apa cara termudah untuk melakukan ini di Windows? Apakah ada beberapa utilitas yang dibangun untuk melakukan ini? Saya bersedia untuk menginstal Cygwin dan perangkat lunak semacam itu jika memang cara termudah (katakanlah, dibandingkan dengan menulis skrip batch), tetapi saya berharap untuk beberapa program di mana saya dapat menyediakan URL dan regex dan berada di jalan saya.

Andrew Cheong
sumber
perhatikan bahwa Anda dapat mengatur GET dan menerima respons melalui Telnet. Anda mungkin dapat melakukan semua yang Anda butuhkan di PowerShell atau bahkan .bat, tetapi secara pribadi saya akan melakukannya di sesuatu seperti .net, python, atau java. instal python di windows bisa jadi menyebalkan, atau saya sarankan saja.
Frank Thomas
windows memang memiliki vbscript dan jscript dan PowerShell. Saya telah melakukan regex dalam vbscript. file batch sangat primitif, tidak ada regex di sana. Tetapi jika Anda tidak tahu vbscript atau jscript atau PowerShell, atau bahkan jika Anda tahu, maka itu masih benar-benar baik dan bagus untuk menginstal cygwin atau gnuwin32, Anda dapat menggunakan * nix utilities. Wget, grep, sed dll Saya seorang pengguna windows besar tetapi masih banyak menggunakan utilitas tersebut dari gnuwin32. Dan jika saya menulis file batch saya sering menggunakannya juga. Melihat judul Anda, saya akan segera berpikir wget dan grep atau sed. atau wget dengan perl satu liner untuk melakukan tugas sed.
barlop
Saya tidak tahu tentang cron tetapi ada windows task scheduler.
barlop
@ FrankThomas bagaimana dengan menginstal Python di Windows itu menyakitkan? Unduh .msidari python.org, jalankan, Anda sudah siap. Jika Anda ingin ekstra, buka lfd.uci.edu/~gohlke/pythonlibs . Apa yang sulit tentang itu?
MattDMo

Jawaban:

4

Sebenarnya, sambil menunggu seseorang menyarankan program ajaib untuk menyelesaikan setiap kebutuhan saya, saya memutuskan untuk memberi Cygwin kesempatan, dan menemukan itu lebih mudah dilakukan daripada yang saya kira.

Saya hanya

  1. mengunduh Cygwin,
  2. memastikan untuk memeriksa curl, crondan cygrunsrvpada saat instalasi,
  3. mengikuti langkah-langkah yang dijelaskan dalam pertanyaan ini (well, sebenarnya, saya mengalami beberapa masalah, tetapi beberapa pencarian Google menyarankan menginstal via cron-configdengan default, memasukkan ntsecdaemon, dan memasukkan kata sandi Windows saya, yang berfungsi),
  4. siapkan crontab berikut :
    * * * * * /home/andrew/cron/get_cvrq_size.sh
  5. atur get_cvrq_size.sh berikut :
    ikal https://stackoverflow.com/review \
        | grep dashboard-num \
        | kepala -1 \
        | sed 's /^.* <div class = "dashboard-num" title = "\ ([^"] \ + \) ". * $ / \ 1 /' \
        | sed 's /, // g' \
        | sed 's / ^ /' `date -Iseconds -u` ', /' \
        >> /home/andrew/cron/cvrq_size.txt

dan itu sudah bekerja seperti pesona :-)

2013-11-25T20:05:01+0000,95583
2013-11-25T20:06:01+0000,95583
2013-11-25T20:07:01+0000,95583
2013-11-25T20:08:01+0000,95583
2013-11-25T20:09:02+0000,95589
2013-11-25T20:10:01+0000,95589
2013-11-25T20:11:01+0000,95587
2013-11-25T20:12:01+0000,95587
2013-11-25T20:13:01+0000,95586
2013-11-25T20:14:01+0000,95589
2013-11-25T20:15:01+0000,95587
2013-11-25T20:16:01+0000,95586
2013-11-25T20:17:01+0000,95585
2013-11-25T20:18:01+0000,95584
2013-11-25T20:19:01+0000,95596
2013-11-25T20:20:01+0000,95596
2013-11-25T20:21:01+0000,95596
2013-11-25T20:22:01+0000,95595
2013-11-25T20:23:01+0000,95595
Andrew Cheong
sumber
saat menjalankan ini setiap menit mungkin baik-baik saja, jangan kaget jika Anda terputus di beberapa titik. Cari tahu use case Anda dan kirimkan jumlah permintaan minimum yang diperlukan. Admin server tidak selalu menyukai skrip ping mesin mereka seperti ini ...
MattDMo
1
bahkan hanya tata letak bagaimana Anda melakukan pemipaan Anda (dengan garis miring terbalik dan garis baru), layak diberi +1
barlop
Tolong jangan gunakan date -Iseconds -u(ISO-8601) seperti yang saya lakukan. Saya pikir itu adalah standar yang layak tetapi ternyata itu hanya menyusahkan untuk mengkonversi - Perl, Python, dan bahkan Mathematica memerlukan perpustakaan eksternal (ly dikompilasi) atau metode khusus untuk mem-parsing format ini dengan benar (termasuk zona waktu). Gunakan date +%ssebagai gantinya, untuk detik sejak zaman. Terinspirasi oleh @Emracool.
Andrew Cheong