2024/10/15

Asynchronous Crawler In PHP, Node.js And Python

久久就要複習一下爬蟲寫法,不然不常用就生疏了,針對三種語言寫個 async 的版本吧。

node.js

const axios = require('axios');  
const urls = [  
    'https://jsonplaceholder.typicode.com/todos/1',  
    'https://jsonplaceholder.typicode.com/todos/2',  
    'https://jsonplaceholder.typicode.com/todos/3',  
];  
  
(async () => {  
    try {  
        const requests = urls.map(url => axios.get(url));  
        const responses = await Promise.all(requests);  
  
        responses.forEach(response => {  
            console.log(response.data.id);  
        });  
    } catch (error) {  
        console.error(error.message);  
    }  
})();

Python

import aiohttp  
import asyncio  
  
urls = [  
    'https://jsonplaceholder.typicode.com/todos/1',  
    'https://jsonplaceholder.typicode.com/todos/2',  
    'https://jsonplaceholder.typicode.com/todos/3',  
]  
  
  
async def fetch_url(session, url):  
    async with session.get(url) as response:  
        return await response.json()  
  
  
async def main():  
    async with aiohttp.ClientSession() as session:  
        tasks = [fetch_url(session, url) for url in urls]  
        responses = await asyncio.gather(*tasks)  
  
        for responses in responses:  
            print(responses.get('id'))  
  
  
if __name__ == '__main__':  
    asyncio.run(main())

PHP

<?php

use GuzzleHttp\Client;
use GuzzleHttp\Promise\Utils;

include "vendor/autoload.php";

$urls = [
    'https://jsonplaceholder.typicode.com/todos/1',
    'https://jsonplaceholder.typicode.com/todos/2',
    'https://jsonplaceholder.typicode.com/todos/3',
];

$client = new Client([
    'verify' => false,
]);
$promises = [];

foreach ($urls as $url) {
    $promises[] = $client->getAsync($url);
}

$results = Utils::all($promises)->wait();

foreach ($results as $result) {
    echo json_decode($result->getBody()->getContents(), true)['id'], PHP_EOL;
}

2024/10/09

(G)I-DLE 2024 Concert In Taipei

我蠻常看演唱會的,但這是我第一次看韓團的演唱會,太喜歡 (G)I-DLE 這個團體了,歌好聽,五個團員又跟瘋子一樣好笑,其中我的本命是 Minnie,迷人的雙眼,有磁性的聲音,親切的外表,完全無法招架。

應該很多人都是從這部影片入坑的,Minnie 非常有語言天分,其他團員雖然也算努力學中文,但 Minnie 講起中文幾乎沒有口音,而且有正確的邏輯理解,這段跟屬於中國人的雨琦吵架居然用邏輯輾壓 😙

她那磁性十足的嗓音我個人覺得她 solo 是完全沒問題的,真的是太可愛了,難能可貴的是,她家在泰國是有錢的家族,(G)I-DLE Minnie竟是隱藏版泰國公主?,有一集韓綜有去拍她家,跟皇宮差不多,但接觸過她的人都說她沒有驕氣,漂亮又可愛的代表。

入口

費盡九牛二虎之力搶到票,2024/10/06 終於讓我一償夙願可以看到他們現場表演。

Taco

由於演唱會是 17:30 開始,所以先吃點東西墊墊肚子,小巨蛋裡面是不可以吃東西的。

演唱會內部

進到演唱會現場超興奮的,我參加過那麼多演唱會,第一次遇到光是看 MV 就全場大合唱的情況,真的超級 high。

我錄了幾首我特別喜歡的歌的片段,大部分的時間都是專心用雙眼雙耳享受現場表演,他們現場實在是太迷人了,由於團內有兩位會講中文的人,跟現場的人互動環節滿點,Yuqi 跟舒華又很搞笑,聊天環節笑料不斷,我上一次看的演唱會是鄭中基,鄭的情歌居多,所以整場大部分都是專心聽歌,冷靜感動,但這場是從頭 high 到尾,因為他們可以帶動氣氛的歌太多了,大部分時間都處於爆裂爽的情況,非常非常的好玩。

這是我聽過這麼多場演唱會以來第一次有結束後不想離開的情緒,就很捨不得,坐我妹旁邊的歌迷還哭了,大家都很依依不捨吧,中間有穿插幾個換裝墊檔的影片,其中一個影片是用 QA 問每個團員一些事情,讓我印象深刻的是,當問到娟總 (G)I-DLE 的演唱會代表什麼時,娟總回答:2024 最開心的一天,我無比的贊同,那天我真的非常非常非常的開心,下次他們再來開演唱會的話,我一定會買下面的座位,我想要得到跟他們互動的機會,真的太喜歡他們了。