ぽっぺんしゃんにょろりんこ

匿名・非追跡型アダルト動画検索エンジンの設計ノート

技術ブログ

動的ウェブサイトで、動画タイトルの文字列を使って動的サイトマップを作る②

こんにちは、にょろりんこの備忘録的技術ブログです。 前回の記事では、動画サイト運営において 無機質なURL(例: /video.php?id=1234)ではSEO評価が上がらない 日本語タイトルをURLスラッグ化して、よりSEOフレンドリーにする という課題感と、その解決方…

Pythonで作る形態素解析API:SudachiPyとFlaskで最速分割サーバー構築②

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、Pythonで作る形態素解析API構築シリーズの第2回 をお届けします。 前回の記事では、SudachiPyをFlaskと組み合わせ、POSTでテキストを送信すると名詞や動詞、形容詞などの基本トークンを返す最小…

Pythonで作る形態素解析API:SudachiPyとFlaskで最速分割サーバー構築①

こんにちは、にょろりんこの備忘録的技術ブログです。 今回のテーマは形態素解析です。 日本語テキストを扱うなら必ず通るこの処理は、検索クエリのタグ生成といった、自然言語処理全般で欠かせないステップです。 日傘をさすティアラ 私が運営しているAV検…

SEOに強い!SPAでもできる動的生成の構造化データ(JSON-LD)の話

こんにちは、にょろりんこの備忘録的技術ブログです。 みなさん、構造化データ(JSON-LD)って使っていますか? 検索エンジン、特にGoogleに「このページは何を扱っているか」を正しく伝えるための仕組みで、リッチリザルトにも表示される重要な要素です。 J…

CTRを正しく計測するためにBOTによる表示カウントを除外する方法

こんにちは、超ニッチ&尖りまくりの、にょろりんこの備忘録的技術ブログです。 前回の記事では、動画の人気ランキングにとって非常に重要な クリック数(selected)のカウント において、Botアクセスを除外する方法を紹介しました。 JavaScript上で生成した…

個人情報を追跡せずにできる!CryptJSでボットクリックからDBを守る方法

こんにちは、にょろりんこの備忘録的技術ブログです。 SaePornsでは、動画の人気度や関連ワードの精度を上げるために、CTR(クリック率)を計測しています。 これは「特定の検索語で表示された動画のうち、実際にどれがクリックされたか」を記録するもので、…

検索機能をAPIに切り出して軽量化!個人製検索エンジンで試した責務分離の実践例

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、個人で開発・運用している検索エンジン「SaePorns」の内部構成を見直した話です。 検索機能のコードが次第に肥大化してきたため、思い切って検索処理を外部APIとして分離し、処理の責任を整理し…

Node.jsで、もうクロールしないURLと、またクロールするURLを分けてフラグ管理する話

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、私が自作している Node.js 製のクローラーの中で使っている flag-update.js という小さなファイルについて紹介します。 ティアラ_手をマルにする このファイルの役割はとてもシンプルで、対象の…

PHPのproxy.phpがFPMを詰まらせていた ─ サムネイル画像のcurlがタイムアウトせず重くなる話

こんにちは、にょろりんこの備忘録的技術ブログです。 今日は、運営中の匿名検索エンジン「Sae-Porns」が「なんか変…」という現象に悩まされていました。 ページがやたらと重い。サムネイルがいつまで経っても表示されない。最悪、白画面のまま固まることも……

Node.jsでURL正規化!末尾スラッシュやアンカーを除去する「normalizeUrl」関数の話

こんにちは、にょろりんこの備忘録的技術ブログです。 今日は、クローリングやリンク収集処理の地味だけど超重要なパーツ、「URLの正規化」についてのお話です。 私が運用しているURLスクレイピング系のURL収集スクリプトでは、同じページを重複して処理しな…

Node.jsで同一ドメインのリンクだけを抽出する。際限のないフェッチングを制限するfilter関数の話

こんにちは、にょろりんこの備忘録的技術ブログです。 今日は、Node.js製のWebクローラーでシードURLからリンクをたどる際に役立つ、同一ドメイン限定のフィルタ関数について紹介します。 クローラーの処理は、最初の1件――いわゆるシードURLから始まります。…

プロキシが回転型じゃなかったので、自前でIPローテのコードを書いた話

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、検索エンジンのインデクシングでよく使われる「回転型プロキシ」について、実際に契約してみたところ、全く回転しなかったという話と、そこから自前でIPローテーションの制御コードを作った過程…

PythonとMythoMaxで外国語AVタイトルを自然な日本語に変換するモジュールを作るという話

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、外国語のAVタイトルから自然な日本語のキャッチコピーを生成する専用モジュール generate_mytho_only.py について紹介します。画像キャプションやタグ生成の処理でもMythoMaxを使っていますが、…

アクセス不能になったURLをDBから削除する。DBクレンジングという裏方作業のお話

こんにちは、にょろりんこの備忘録的技術ブログです。 今回はNode.jsを使い、アクセス不能になったURLをDBから削除する(DBクレンジング)という話です。 SaePornsのような動画検索サービスでは、日々大量のURLが自動で収集・登録されていきます。けれど、そ…

Node.js + Puppeteerでサムネイル画像を動画ページから抽出するという話

こんにちは、にょろりんこの備忘録的技術ブログです。 今回は、動画ページから最適なサムネイル画像URLを抽出するためのモジュール、fetch-image.js をご紹介します。 これは、私が開発・運用しているポルノ動画検索エンジン「Sae-Porns」の中でも、ユーザー…

Node.js + Puppeteer で動画タイトルをなるべく正確に取得する方法

こんにちは、にょろりんこの備忘録ブログです。 今日は Sae-Porns の中でも地味だけど重要な処理──動画ページのタイトルをなるべく正確に取得する仕組みについて解説します。 今回取り上げるのは、以下のモジュールです: async function fetchTitle(page) {…

Node.js + Puppeteerで不要リソースをブロックし、軽量&安全にページを取得するという話

こんにちは、にょろりんこ的、備忘録技術ブログです。 以前に「インデックスする必要のないページは最初から開かない」という話をしましたが、今回は逆に「開いたページでも、いらないものは一切読み込まない」という話です。 関連記事 pop-ancient.hatenabl…

Node.jsのCLI引数を活用し、開発・本番を分岐するテストモードを実装!本番DBを汚すことなく動作確認をする話

こんにちは、にょろりんこの備忘録的ブログです。 今回は、Node.jsのCLI引数を活用し、開発・本番を分岐するテストモードを実装。本番DBを汚すことなく動作確認をするというお話をしていきます。 みなさん、こんな経験ありませんか? スクリプトを試したいけ…

イメージ画像から検索用タグを自動生成するというお話:③スダチ形態素解析編

こんにちは、にょろりんこの技術備忘録ブログです。 今回は、前回の「MythoMaxでキャッチコピー生成」編で得られた日本語タイトルを、さらに検索性の高い語句に分解していく第3ステップ──「形態素解析」編です。 今日の私は言語学者です。 AIが画像から文章…

イメージ画像から検索用タグを自動生成するというお話:②MythoMax日本語変換編

こんにちは、にょろりんこの技術備忘録ブログです。 今回は、前回の『BLIPで画像から自然文のキャプションを生成する』編の続きとなる第2ステップ──英語キャプションを、日本語の自然な一文に変換する「MythoMax日本語変換編」です。 AIが画像から文章をつく…

イメージ画像から検索用タグを自動生成するというお話:①BLIP編

こんにちは、にょろりんこの技術備忘録ブログです。 今回は『イメージ画像から画像検索用のタグを自動生成する』というお話のうち、最初のステップである、『BLIPで画像から自然文のキャプションを生成する』編です。 このシリーズのお話は、Sae-Porns の裏…

プロキシの使用量明細から、不要ドメインを見極めブロックし、プロキシ帯域削減とスピード向上をするというお話

こんにちは、にょろりんこの備忘録的な開発ブログです。 今日は「プロキシの使用量明細をもとに、アクセス不要なドメインを見極めてブロックする」という、地味ながらも効果絶大な最適化のお話です。 Puppeteerを使ってクローリングをしていると、ページにア…

プロキシ会社を比較してわかったこと。Evomiが個人開発で一番使えた話【回転型・住宅IP】

個人開発者による、プロキシ会社選定の備忘録(あくまで個人的な感想です) こんにちは、にょろりんこです。 今回は、個人開発の立場から、これまで試したプロキシサービスについての所感をざっくりまとめておきます。 あくまで備忘録的な投稿ですが、同じよ…

ChatGPTの画像生成AIモデル(DALL·E)がバージョンアップし、マスコットキャラの画風がロストテクノロジーになった話

2025年5月頃、ChatGPTの画像生成AI(DALL·E)が密かに更新されました。 それにより、Sae-Pornsのマスコットキャラ「ティアラ」のあの独特な画風が、再現できなくなってしまったのです。 でもこれは、終わりではなく、進化の始まり。Stable Diffusion系のさま…

Node.jsで不要ページを事前にフィルタリングし、クロール高速化&帯域削減するというお話

※全体のクローリング処理では Puppeteer を使用していますが、この記事で紹介するフィルタリング処理は Node.js 単体で完結しています。 こんにちは、にょろりんこです。 今回は、クローリング処理を高速化&軽量化するために導入している、「事前URLフィル…

Node.js + Puppeteerで noindex ページを検出し、インデクシングを回避するというお話 

こんにちは、あなたを追跡しないポルノ動画検索エンジン、Sae-Porns管理人のにょろりんこです。 検索エンジンを作成する際、あなたのクローラーは noindex をちゃんと避けてますか? クローリング/インデクシングする時に、気をつけなければいけないこと。…

誤検索を防ぐ、ポルノ動画検索エンジンのネーミングSEO戦略の話

こんにちは、にょろりんこです。 今回は、「なぜ “Sae-Porns” という名前にしたのか?」というお話です。 ちょっとギョッとする名前かもしれませんが、これにはちゃんと理由があります。というか、最初はこういう名前ではなかったんです。 最初は「FairyWork…

なぜ「追跡されないポルノ検索エンジン」を作ろうと思ったのか

こんにちは、にょろりんこです。 このブログは、私がひとりで開発している匿名検索サービス「Sae-Porns(えすえーいーぽーんず)」の進捗や裏話、試行錯誤の記録などを綴っていく場です。 初回は、「なんでそんなものを作ろうと思ったの?」という話から始め…