AIイラスト投稿サイト「ちちぷい」の画像をダウンロードするスクリプトを作ってみた!!
はじめに
以前、AIイラストコンテストを自動運営するサイトの企画を提案していたことを覚えているかしら?
実は、この企画の実現に向けて開発している最中に、ある障壁が出てきてしまったの。
それは……AIイラストであるか否かをどうやって自動判定しよう問題よ。
現状では、ほとんどのAIイラストやAI画像には「電子透かし」が導入されていない状況なの。
だから、見分ける方法は人間の目ってことになるのよね。
でも私が目視で毎回イラストを確認していたら、自動運営とは言えなくなってしまうのよね……。
そこで「AIイラストであることを判定するAI」を独自に開発しようと考えたのよ。
画像認識を使った画像分類AIについては、既に多く存在しているのだけれど、料金的な問題があるから自分で開発したいのよね……。
AI開発には「人間の描いたイラスト」と「AIが生成したイラスト」の2つのデータを集めて学習させる必要があるの。
だから、今回はAIイラスト投稿人気の高い「ちちぷい」からAIイラストの画像データを集めることにしたわ。
その際に作成したスクリプトを、今回は無料で公開するよ!!
注意
ちちぷいの利用規約では「私的利用、引用、検討過程における利用または情報解析における利用その他の著作権制限事由がある場合」以外での複製は禁止されているの。悪用はしないようにしてね。
このスクリプトは、悪用の為に公開しているものではありません。
スクリプト及び改造済みのスクリプトを第三者に譲渡 / 販売 / 公開 / 配布する行為は禁止とします。
万が一、スクリプトの実行によって被害にあったとしても、私は責任をとれませんので、自己責任で実行してください。
スクリプト
「スクリプトは画像URLを抽出してコピーするスクリプト」と「画像URLから画像をダウンロードするスクリプト」の2つに分かれているよ。
どちらもちちぷいのWebサイト上で開発者ツールを開いて、コンソールから実行するようにしてね。
画像URLを抽出してコピーするスクリプト
下記のようなページで実行してね。
https://www.chichi-pui.com/posts/?taste=illustration
実行すると、ページ内で表示されているイラストの画像URLをまとめてコピーできるよ。
let imageUrls = [];
document.querySelectorAll('.p-image-cards-with-like__item-image-wrapper img').forEach(image => {
if (!image.src.includes('multi-')) {
const url = new URL(image.src);
url.search = '';
imageUrls.push(url.href);
}
});
const urlsText = imageUrls.join('\n');
const textArea = document.createElement('textarea');
textArea.value = urlsText;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
const successful = document.execCommand('copy');
const msg = successful ? '成功' : '失敗';
console.log('クリップボードへのコピー: ' + msg);
} catch (err) {
console.error('クリップボードへのコピーに失敗しました: ', err);
}
document.body.removeChild(textArea);
画像URLから画像をダウンロードするスクリプト
実行すると、画像みたいなモーダルが右下に表示されるよ。
入力できる場所に、まとめてコピーした画像URLをそのまま貼り付けて、ダウンロードという部分をクリックしてね。
あとは画像が自動でダウンロードされていくから、ダウンロードが終わるまで待つだけよ。
※複数のファイルをダウンロードする場合、ブラウザが権限を求めることがあるわ。もしダウンロードが停止した場合は、その権限を許可した上で再度実行してね。
function createModal() {
const modalContainer = document.createElement('div');
modalContainer.style.position = 'fixed';
modalContainer.style.bottom = '20px';
modalContainer.style.right = '20px';
modalContainer.style.backgroundColor = 'white';
modalContainer.style.border = '1px solid #ccc';
modalContainer.style.padding = '10px';
modalContainer.style.zIndex = '1000';
const textarea = document.createElement('textarea');
textarea.style.width = '300px';
textarea.style.height = '100px';
modalContainer.appendChild(textarea);
const downloadButton = document.createElement('button');
downloadButton.textContent = 'ダウンロード';
downloadButton.onclick = () => downloadImages(textarea.value);
modalContainer.appendChild(downloadButton);
document.body.appendChild(modalContainer);
}
async function downloadImages(imageUrls) {
const urls = imageUrls.split('\n');
for (const url of urls) {
if (url.trim() !== '') {
try {
const response = await fetch(url);
const blob = await response.blob();
const downloadUrl = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = downloadUrl;
a.download = url.split('/').pop();
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(downloadUrl);
document.body.removeChild(a);
} catch (error) {
console.error('画像のダウンロードに失敗しました:', error);
}
}
}
}
createModal();
最後に
「こんなスクリプトを書いてみて欲しい」
「こんなものを作りたいけど作り方を教えて欲しい」
といった要望があれば、コメントにお願いね。
私が時間のある時に記事にして公開するよ!!
使い方で分からないことがあれば、それも教えるよ。
PR
noteのフォローをよろしくね!!
コメントした人にはフォローを返すよ!!
Twitterもやっているから、フォローしてくれたら嬉しいです!!
この記事が気に入ったらサポートをしてみませんか?