mattintosh note

どこかのエンジニアモドキの備忘録

にじさんじメンバーとかのYouTubeチャンネルIDを取得するだけのスクリプト

暇つぶしでやってる VTuber のランキングサイトに ID を追加するのに5分くらいで適当に書いたもの。YouTube API の仕様変わっちゃったんでどうしようかな〜と思ってるんだけど現時点で登録数 350 超えてるし基本放置プレイなのでどうでもよいのだけどね。

にじさんじ

#!/bin/bash
 set -e
 set -u
 set -x

set -- $(
    curl 'https://nijisanji.ichikara.co.jp/member/' \
    | ruby -e '
        require "nokogiri"
        Nokogiri::HTML.parse(STDIN.read).xpath(%!//div[@class="insideline"]/a!).each do |n|
            puts n.attr("href")
        end
    '
)
ids=()
for f
do
    id=$(
        curl "${f}" \
        | ruby -e '
            require "nokogiri"
            require "uri"
            Nokogiri::HTML.parse(STDIN.read).xpath(%!//a[contains(@class, "elementor-social-icon-youtube")]!).each do |n|
                puts URI.parse(n.attr("href")).path.split("/")[-1]
            end
        '
    )
    echo ${id}
    ids+=(${id})
done
printf '%s\n' ------------------------
printf '%s\n' "${ids[@]}"
UCD-miitqNY3nyukJ4Fnf4_A
UC0g1AE0DOjBYnLhkgoRWN1w
UC6oDys1BGgBsIC3WhG1BovQ
UCsg-YqdqQ-KFF0LNk23BY4A
UC_4tXjqecqox5Uc05ncxpxg
UCoztvTULBYd3WmStqYeoHcA
UCwokZsOK_uEre70XayaFnzA
UCCVwhI5trmaSxfcze_Ovzfw
UCZ1xuCK1kNmn5RzPYIZop3w
UCt5-0i4AVHXaWJrL8Wql3mw
UCTi_rzf5QIkXjhJjkbcAdTg
UCwQ9Uv-m8xkE5PzRc7Bqx3Q
UCSFCh5NL4qXrAy9u-u2lX3g
UCHVXbQzkl3rDfsXWo8xi2qw
UCPvGypSgfDkVe7JG2KygK7A
UC1zFJrfEKvCixhsjNSb1toQ
UCspv01oxUFf_MTSipURRhkA
UCbc8fwhdUNlqi-J99ISYu4A
UC_a1ZYZ8ZTXpjg9xUY9sj8w
UCeShTCVgZyq2lsBW9QwIJcw
UCt0clH12Xk1-Ej5PXKGfdPA
UCXRlIK3Cw_TJIQC5kSJJQMg
UCV5ZZlLjk5MKGg3L0n0vbzw
UCLO9QDxVL4bnvRRsz6K4bsQ
UCKMYISTJAQ8xTplUPHiABlA
UCdpUojq0KWZCN9bxXnZwz5w
UC53UDnhAAYwvNO7j_2Ju1cQ
UCtpB6Bvhs1Um93ziEDACQ8g
UCYKP16oMX9KKPbrNgo_Kgag
UCv1fFr156jc65EMiLbaLImw
UCveZ9Ic1VtcXbsyaBgxPMvg
UCmUjjW5zF1MMOhYUwwwQv9Q
UChUJbHiTVeGrSkTdBzVfNCQ
UCIytNcoz4pWzXfLda0DoULQ
UCmovZ2th3Sqpd00F5RdeigQ
UCb5JxV6vKlYVknoJB8TnyYg
UCsFn_ueskBkMCEyzCEqAOvg
UC_GCs6GARLxEHxy1w40d6VQ
UC8C1LLhBhf_E2IBPLSDJXlQ
UCJubINhCcFXlsBwnHp0wl_g
UCL34fAoFim9oHLbVzMKFavQ
UCjlmCrq4TP1I4xguOtJ-31w
UCfQVs_KuXeNAlGa3fb8rlnQ
UCvmppcdYf4HOv-tFQhHHJMA
UCTIE7LM5X15NVugV7Krp9Hw
UCGYAYLDE7TZiiC8U6teciDQ
UC9EjSJ8pvxtvPdxLOElv73w
UCUc8GZfFxtmk7ZwSO7ccQ0g
UCBi8YaVyZpiKWN3_Z0dCTfQ
UC3lNFeJiTq6L3UWoz4g1e-A
UC48jH1ul-6HOrcSSfoR02fQ
UCRWOdwLRsenx2jLaiCAIU4A
UCNW1Ex0r6HsWRD4LCtPwvoQ
UCWz0CSYCxf4MhRKPDm220AQ
UC0WwEfE-jOM2rzjpdfhTzZA
UCmeyo5pRj_6PXG-CsGUuWWg
UCfipDDn7wY-C-SoUChgxCQQ
UCnRQYHTnRLSF0cLJwMnedCg
UCo7TRj3cS-f_1D9ZDmuTsjw
UCHBhnG2G-qN0JrrWmMO2FTA
UCXU7YYxy_iQd3ulXyO-zC2w
UC9V3Y3_uzU5e-usObb6IE1w
UCpnvhOIJ6BN-vPkYU9ls-Eg
UCLpYMk5h1bq8_GAFVBgXhPQ
UCg63a3lk6PNeWhVvMRM_mrQ
UC2OacIzd2UxGHRGhdHl1Rhw
UCkIimWZ9gBJRamKF0rmPU8w
UCtnO2N4kPTXmyvedjGWdx3Q
UCryOPk2GZ1meIDt53tL30Tw
UCBiqkFJljoxAj10SoP2w2Cg
UCHX7YpFG8rVwhsHCx34xt7w
UCeK9HFcRZoTrvqcUCtccMoQ
UCRV9d6YCYIMUszK-83TwxVA
UCUzJ90o1EjqUbk2pBAy0_aw
UCpNH2Zk2gw3JBjWAKSyZcQQ
UCIG9rDtgR45VCZmYnd-4DUw
UCuz0vzQgC8LRdS6lVV0UkUg
UCwrjITPwG4q71HzihV2C7Nw
UC6TfqY40Xt1Y0J-N18c85qQ
UCl1oLKcAq93p-pwKfDGhiYQ
UCvzVB-EYuHFXHZrObB8a_Og
UCHK5wkevfaGrPr7j3g56Jmw
UCiSRx1a2k-0tOg-fs6gAolQ
UCqQV8xEBWd5SVZBLlYrS_5Q
UCllKI7VjyANuS1RXatizfLQ
UCb6ObE-XGCctO3WrjRZC-cw
UCerkculBD7YLc_vOGrF7tKg
UCufQu4q65z63IgE4cfKs1BQ
UCtAvQ5U0aXyKwm2i4GqFgJg
UCoM_XmK45j504hfUWvN06Qg

upd8

ワンライナーでOK。

curl 'https://upd8.jp/virtual_talent/' | ruby -e 'require "nokogiri"; require "uri"; Nokogiri::HTML.parse(STDIN.read).xpath(%!//div[@class="link_youtube"]/a[starts-with(@href, "https://www.youtube.com/channel/")]!).each do |n| puts URI.parse(n.attr("href")).path.split("/")[-1] end'
UC4YaOt1yT-ZeyB0OmxHgolA
UCGcD5iUDG8xiywZeeDxye-A
UCNjTjd2-PMC8Oo_-dCEss7A
UCHTnX0CSX_KObo5I9WuZ64g
UCfiK42sBHraMBK6eNWtsy7A
UC0TXe_LYZ4scaW2XMyi5_kw
UCH1B9AR8sfWJVf9zcu9rbGg
UCKDHdDpoE9lurDuyAGAuNnw
UCgqQ5iuvUyPRHp3rBLuOtCw
UCeLzT-7b2PBcunJplmWtoDg
UCwePpiw1ocZRSNSkpKvVISw
UCDh2bWI5EDu7PavqwICkVpA
UCYTz3uIgwVY3ZU-IQJS8r3A
UC0Owc36U9lOyi9Gx9Ic-4qg
UCRvpMpzAXBRKJQuk-8-Sdvg
UC2kyQhzGOB-JPgcQX9OMgEw
UCeAfiVvEuyICYJW-f3GnQjQ
UC3iwL9Yz8LcKkJsnLPevOTQ
UCPf-EnX70UM7jqjKwhDmS8g
UCkPIfBOLoO0hVPG-tI2YeGg
UC3-jXrZXv-PQshpaTQpicPQ
UC0e6zo8oX6ISSBjPaSZsjeA
UCLQIMDHNE0ZGAiHIdMbq7dw
UCHxPGxBdXPWwRrSSTJaRSKg
UCMxKcUjeTEcgHmC9Zzn3R4w
UCE5rWcDxLPaaUFWOxzJFfNg
UCBnJcqkJofBN26VELPXSB5A
UCk7cMvrfvH98Bfng58N_Zzw
UCQn9QZF02tAUnC-hCnveEng
UCu5DbFfYe3KiwhcmanCvSVg
UCs8xsWmWEjjcyjAFu5KMGIg
UC7-N7MvN5muVIHqyQx9LFbA
UCp77Qho-YHhnklRr-DkjiOw
UChLfthKoUV502J7gU9STArg
UCGFD_8TRHhlpjfqGhLUSk4g
UCmGxj8pXAF4J8tVYiveAnpQ
UCPljC4d-GgdFgVqtoCZ3m_w
UCiVRnULJjc8o-j_lG5BAzKw
UCZx7wgGNs2UFyRRtLoNur9Q
UCZx7wgGNs2UFyRRtLoNur9Q
UCHccxX2p_9DB_HPnXSb2omw
UChGY3OpdU6wzFzygJ_Rjvlw
UCX7WYPXASkYUm2GyomLllIg
UCZk6mxfTpjuuxgqxuFBJO_g
UCSyB7n4vUn-_Ah3KEuka2hw
UCg8TPE5nLLOqlNnBivmQwww
UC0QzO6nK1cEDZvJSt2769Zw
UCyZZMKRn-mUEkPzaqa9b6bg
UCJzg5k2prEhTPMoK0kcBQPg

ホロライブ

ワンライナーでOK。

curl 'https://www.hololive.tv/member' | ruby -e 'require "nokogiri"; require "uri"; Nokogiri::HTML.parse(STDIN.read).xpath(%!//a[starts-with(@href, "https://www.youtube.com/channel/")]!).each do |n| puts URI.parse(n.attr("href")).path.split("/")[-1] end'
UCp6993wxpyDPHUpavwDFqgg
UCDqI2jOz0weumE8s7paEk6g
UC-hM6YJuNYVAmUWxeIr9FeA
UCD8HOxPs4Xvsm8H0ZxXGiBw
UCFTLzh12_nrtzqBPsTCqenA
UC1CfXB_kRs3C-zaeTG3oGyg
UCdn5BQ06XqgXoAxIhbqw5Rg
UCQ0UDLQCjY0rmuxCDE38FGg
UC1opHUrw8rvnsadT-iGp7Cg
UCXTpFs_3PqI41qX2d9tL2Rw
UC7fk0CB07ly8oSl0aqKkqFg
UC1suqwovbL1kzsoaZgFZLKg
UCvzGlP9oQwU--Y0r9id_jnA
UCp-5t9SrOQwXMU7iIjQfARg
UCdn5BQ06XqgXoAxIhbqw5Rg
UCvaTdHTWBGv3MKj3KVqJVCw
UChAnqc_AY5_I3Px5dig3X1Q
UC1DCedRgGHBdm81E1llLhOQ
UCl_gCybOJRIgOXw6Qb4qJzQ
UCvInZx9h3jC2JzsIzoOebWg
UCdyqAaZDKHXg4Ahi7VENThQ
UCCzUftO8KOVkV4wQG1vkUvg
UC0TXe_LYZ4scaW2XMyi5_kw
UC5CwaMl1eIgY8h02uZw7u8A

vtubers.ga