PHP

『PHP』2ちゃんねる【自動まとめサイト】を作って完全自動で稼ごう!!

2ちゃんねる(2ch)は、日本発の巨大な掲示板サイトであり、さまざまな話題についてのスレッドが立ち上げられ、ユーザー間で情報交換が行われています。そんな2ちゃんねるのスレッドを自動的にまとめるウェブサイトを作成して、収益を上げる方法について解説します!

まとめに必要なコードや、自動まとめサイトの効率的な運用など全て解説します!
ココナラやランサーズでは、同等の内容を、¥20,000から販売されている方も大勢いらっしゃいますが、この記事を最後まで読み、コピペするだけで同等の事が可能になります!!
少しカスタマイズすると、有料ツールとして販売したり、2ちゃんねる以外のサイトから記事を自動生成し、独自のポータルサイトを作成する事も可能になります。
また、自動投稿前に、ChatGPTなどを通すと更に良い感じにまとめてくれます。(今回のコードには入れていませんが、簡単に追加可能です。)

コードをどのように利用されても構いませんので、副業としてココナラなどで集客しても良いですし、ご自身で自動まとめサイトを量産し稼いでいただいても良いです。

是非、最後までお読み下さい。

WordPressサイトを作成

今回はレンタルサーバーにインストールする手順を紹介します。
レンタルサーバーを利用する場合、「CRON」を利用できるレンタルサーバーを契約して下さい。(XSERVER、さくらのレンタルサーバーなど)

手順は下記の通りです。

  1. レンタルサーバーにログイン: レンタルサーバーの提供業者から提供されたユーザー名とパスワードを使用して、レンタルサーバーにログインします。
  2. cPanelにアクセス: cPanelのURLは、提供業者から提供された情報に記載されているはずです。ブラウザでcPanelにアクセスします。
  3. データベースの作成: WordPressはデータベースを使用するため、cPanel内で新しいデータベースを作成します。cPanelには「MySQLデータベースウィザード」または同様のツールが含まれています。新しいデータベースを作成し、ユーザーを関連付けて権限を設定します。これらの情報を控えておきます。
  4. WordPressのダウンロード: WordPressの最新バージョンをWordPress.orgからダウンロードします。ダウンロードしたファイルを解凍し、ローカルコンピュータに保存します。
  5. ファイルをアップロード: cPanelの「ファイルマネージャー」を使用して、ウェブサーバーの公開ディレクトリ(通常はpublic_htmlまたはwww)にWordPressのファイルをアップロードします。
  6. WordPressの設定: アップロードしたWordPressファイルをブラウザでアクセスして、WordPressの設定ウィザードが表示されます。必要な情報を提供し、データベース接続情報を入力します。
  7. WordPressをインストール: WordPressの設定が完了すると、インストールボタンをクリックしてWordPressをインストールします。
  8. WordPressの設定: インストールが完了したら、WordPressの基本設定(サイトのタイトル、ユーザー名、パスワードなど)を行います。
  9. インストールの確認: ブラウザでWordPressの管理画面にアクセスして、正しくインストールされていることを確認します。

FTPの説明

作成したコードをアップロードしてCRONで自動的に実行する為に、レンタルサーバーへ「FTP」を利用してコードをアップロードする必要がありますので、簡単に手順だけ書いておきます。

  1. FTPクライアントのインストール: まず、FTPクライアントソフトウェアをコンピュータにインストールします。一般的なFTPクライアントには、FileZilla、Cyberduck、WinSCPなどがあります。選択したFTPクライアントをダウンロードしてインストールします。
  2. ログイン情報の入力: FTPクライアントを起動し、レンタルサーバーへの接続情報を入力します。通常、以下の情報が必要です:
    • ホスト名(FTPサーバーのアドレス)
    • ポート番号 (通常は21)
    • ユーザー名
    • パスワード
  3. 接続: 入力した情報を使用してFTPクライアントをサーバーに接続します。接続が成功すると、サーバー上のファイルとディレクトリをクライアントで閲覧できるようになります。
  4. ファイルのアップロード: ローカルコンピュータからレンタルサーバーにファイルをアップロードするには、ローカルディレクトリとリモートディレクトリを選択し、ファイルをドラッグアンドドロップするか、アップロードボタンをクリックします。
  5. ファイルのダウンロード: サーバーからファイルをダウンロードするには、リモートディレクトリで目的のファイルを選択し、ダウンロードボタンをクリックしてローカルコンピュータにファイルを保存します。
  6. ファイル操作: FTPクライアントを使用してファイルの操作(リネーム、削除、新しいディレクトリの作成など)も行えます。
  7. 接続の終了: ファイルのアップロードやダウンロードが完了したら、FTPクライアントからサーバーへの接続を切断します。

2ちゃんねるのスレッドを自動でまとめるコードを作成

それでは早速コードを作りましょう!
今回はPHPを利用して、スクレイピング用のコードを書いていきます。

以下のコードを、テキストエディタ(vscodeなど)を開き、「2chsc_crawl.php」と名前を付けて保存して下さい。

<?php
set_time_limit(1800);

require_once(dirname(dirname(dirname(dirname(__FILE__)))) . '/wp-load.php');
require_once(WP_PLUGIN_DIR . '/autopost2ch/vendor/autoload.php');
use Goutte\Client;

global $ita;
global $ita2;
global $ita3;
global $ita4;
global $ita5;
$getch = get_option('sc_getsc');
echo $getch;
$ita = get_option('sc_ita');
$ita2 = get_option('sc_ita2');
$ita3 = get_option('sc_ita3');
$ita4 = get_option('sc_ita4');
$ita5 = get_option('sc_ita5');
echo $ita;
echo $ita2;
echo $ita3;
echo $ita4;
echo $ita5;
$sc_cat = get_option('sc_cat');
$sc_cat2 = get_option('sc_cat2');
$sc_cat3 = get_option('sc_cat3');
$sc_cat4 = get_option('sc_cat4');
$sc_cat5 = get_option('sc_cat5');
echo $sc_cat3;
$sctype = get_option('sc_sctype');
$ngword = get_option('ngword');
$kankaku = get_option('kankaku');
$posttype = get_option('posttype');


function ap($ita_shu, $url, $cat)
{
    global $postnum;
    global $sctype;

    $postnum = get_option('sc_postnum');
    $k = 0;
    global $ikinum;
    $ikinum = 0;
    while ($postnum > $k) {
        global $ita;
        global $ita2;
        global $ita3;
        global $ita4;
        global $ita5;
        global $title;
        global $kiji;
        global $kijidt;
        global $array;
        global $mes;
        global $n;
        global $ikinum;
        global $linknew2;
        global $linknew3;
        $n = 0;
        while ($n < 1) {
            $client = new Client();
            $crawler = $client->request('GET', $url);
            $surecount = $crawler->filter('#trad a')->count();
            $rand_ar = rand(0, $surecount);
            $linkmoto = $crawler->filter('#trad a')->eq($rand_ar)->attr('href');
            $linknew = strstr($linkmoto, "l50", TRUE);

            global $getch;
            echo $getch;
            if ($getch == "2ch") {
                if ($ita_shu == "http://hayabusa3.2ch.sc/news/subback.html") {
                    $linknew2 = "http://hayabusa3.2ch.sc/test/read.cgi/news/" . $linknew;
                    echo "ok";
                } elseif ($ita_shu == "http://hayabusa9.2ch.net/mnewsplus/subback.html") {
                    $linknew3 = "http://hayabusa9.2ch.net/test/read.cgi/mnewsplus/" . $linknew;
                } elseif ($ita_shu == "http://lavender.2ch.net/gamenews/subback.html") {
                    $linknew3 = "http://lavender.2ch.net/test/read.cgi/gamenews/" . $linknew;
                }
            } else {
                if ($ita_shu == "http://hayabusa3.2ch.sc/news/subback.html") {
                    $linknew3 = "http://hayabusa3.2ch.sc/test/read.cgi/news/" . $linknew;
                } elseif ($ita_shu == "http://hayabusa3.2ch.sc/mnewsplus/subback.html") {
                    $linknew3 = "http://hayabusa3.2ch.sc/test/read.cgi/mnewsplus/" . $linknew;
                } elseif ($ita_shu == "http://awabi.2ch.sc/gamenews/subback.html") {
                    $linknew3 = "http://awabi.2ch.sc/test/read.cgi/gamenews/" . $linknew;
                }
            }

            if (!empty($linknew2)) {
                $crawler = $client->request('GET', $linknew2);
                $count = $crawler->filter('.post')->count();
                $scpost = get_option('sc_scpost');
                if ($count > $scpost) {
                    $crawler->filter('.title')->eq(0)->each(function ($node) {
                        $gettitle = $node->text() . "\n";
                        $ngw = get_option('sc_ngword');
                        $ng = "/" . $ngw . "/";
                        if ($ngw) {
                            global $ngflag;
                            $ngword = (explode(",", $ngw));

                            foreach ($ngword as $ngl) {
                                if (strpos($gettitle, $ngl) !== false) {

                                    $ngflag = 1;
                                    echo "NGWORD";
                                    break;
                                }
                            }
                            if ($ngflag != 1) {
                                global $title;
                                $gtitle = $node->text();
                                $search = array('[無断転載禁止]c2ch.net', 'c2ch.net');
                                $title = str_replace($search, "", $gtitle);
                                echo "clear";
                                global $n;
                                $n++;
                            }
                        } else {
                            global $title;
                            $gtitle = $node->text();
                            $search = array('[無断転載禁止]c2ch.net', 'c2ch.net');
                            $title = str_replace($search, "", $gtitle);
                            echo "clear";
                            global $ikinum;
                            global $n;
                            $ikinum++;
                            $n++;
                        }
                    });
                }
            }
            if (!empty($linknew3)) {
                $crawler = $client->request('GET', $linknew3);
                $count = $crawler->filter('dd')->count();
                $scpost = get_option('sc_scpost');
                if ($count > $scpost) {
                    $crawler->filter('h1')->eq(0)->each(function ($node) {
                        $gettitle = $node->text() . "\n";
                        $ngw = get_option('sc_ngword');
                        $ng = "/" . $ngw . "/";
                        if ($ngw) {
                            global $ngflag;
                            $ngword = (explode(",", $ngw));

                            foreach ($ngword as $ngl) {
                                if (strpos($gettitle, $ngl) !== false) {

                                    $ngflag = 1;
                                    echo "NGWORD";
                                    break;
                                }
                            }
                            if ($ngflag != 1) {
                                global $title;
                                $gtitle = $node->text();
                                $search = array('[無断転載禁止]c2ch.net', 'c2ch.net');
                                $title = str_replace($search, "", $gtitle);
                                echo "clear";
                                global $n;
                                $n++;
                            }
                        } else {
                            global $title;
                            $gtitle = $node->text();
                            $search = array('[無断転載禁止]c2ch.net', 'c2ch.net');
                            $title = str_replace($search, "", $gtitle);
                            echo "clear";
                            global $n;
                            $n++;
                        }
                    });
                }
            }
        }

        if (!empty($linknew2)) {
            global $crawler;
            global $client;
            $client = new Client();
            global $linknew2;
            $crawler = $client->request('GET', $linknew2);
            $count = $crawler->filter('.post')->count();
            $array = array();
            global $source;
            $crawler->filter('.post')->eq(0)->each(function ($node) {
                global $source;
                $source = $node->html();
            });

            $array[] = '<p class="chlink"><a href="' . $linknew3 . '" target="_blank">引用元</a></p>' . $source;

            $keynum = array();
            $random = range(1, $count);
            shuffle($random);
            foreach ($random as $rand) {
                $keynum[] = $rand;
            }
            $i = 0;
            while ($i < $count) {
                $crawler->filter('.post')->eq($keynum[$i])->each(function ($node) {
                    $getkiji = $node->html() . "\n";
                    $ngw = get_option('sc_ngword2');
                    if ($ngw) {
                        global $ngflag;
                        $ngword = (explode(",", $ngw));
                        foreach ($ngword as $ngl) {
                            if (strpos($getkiji, $ngl) !== false) {
                                $ngflag = 1;
                                echo "NGWORD";
                                break;
                            }
                        }
                        if ($ngflag != 1) {

                            global $kiji;
                            $kiji = $node->html();
                        }
                    } else {
                        global $kiji;
                        $kiji = $node->html();
                    }
                });

                $array[] = $kiji;
                $i++;
            }
            $scpost = get_option('sc_scpost');
            if ($count > 100) {
                if ($scpost == "100") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50] . $array[51] . $array[52] . $array[53] . $array[54] . $array[55] . $array[56] . $array[57] . $array[58] . $array[59] . $array[60] . $array[61] . $array[62] . $array[63] . $array[64] . $array[65] . $array[66] . $array[67] . $array[68] . $array[69] . $array[70] . $array[71] . $array[72] . $array[73] . $array[74] . $array[75] . $array[76] . $array[77] . $array[78] . $array[79] . $array[80] . $array[81] . $array[82] . $array[83] . $array[84] . $array[85] . $array[86] . $array[87] . $array[88] . $array[89] . $array[90] . $array[91] . $array[92] . $array[93] . $array[94] . $array[95] . $array[96] . $array[97] . $array[98] . $array[99] . $array[100];
                }
            }
            if ($count > 70) {
                if ($scpost == "70") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50] . $array[51] . $array[52] . $array[53] . $array[54] . $array[55] . $array[56] . $array[57] . $array[58] . $array[59] . $array[60] . $array[61] . $array[62] . $array[63] . $array[64] . $array[65] . $array[66] . $array[67] . $array[68] . $array[69] . $array[70];
                }
            }
            if ($count > 50) {
                if ($scpost == "50") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50];
                }
            }
            if ($count > 30) {
                if ($scpost == "30") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30];
                }
            }
            if ($count > 10) {
                if ($scpost == "10") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10];
                }
            } else {
                $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10];
            }
        }

        if (!empty($linknew3)) {
            global $crawler;
            global $client;
            $client = new Client();
            global $linknew3;
            $crawler = $client->request('GET', $linknew3);
            global $count;
            $count = $crawler->filter('dt')->count();
            $array = array();
            global $sourcedt;
            global $source;
            $crawler->filter('dt')->eq(0)->each(function ($node) {
                global $sourcedt;
                $sourcedt = $node->html() . "\n";
            });
            $crawler->filter('dd')->eq(0)->each(function ($node) {
                global $source;
                $source = $node->html();

            });
            $array[] = '<p class="chlink"><a href="' . $linknew3 . '" target="_blank">引用元</a></p>' . $sourcedt . $source;
            $keynum = array();
            $random = range(1, $count);
            shuffle($random);
            foreach ($random as $rand) {
                $keynum[] = $rand;
            }
            $i = 0;
            while ($i < $count) {
                $crawler->filter('dt')->eq($keynum[$i])->each(function ($node) {
                    global $kijidt;
                    $kijidt = $node->html() . "\n";
                });

                $crawler->filter('dd')->eq($keynum[$i])->each(function ($node) {
                    $getkiji = $node->html() . "\n";
                    $ngw = get_option('sc_ngword2');
                    if ($ngw) {
                        global $ngflag;
                        $ngword = (explode(",", $ngw));

                        foreach ($ngword as $ngl) {
                            if (strpos($getkiji, $ngl) !== false) {
                                $ngflag = 1;
                                echo "NGWORD";
                                break;
                            }
                        }
                        if ($ngflag != 1) {

                            global $kiji;
                            $gkiji = $node->html();
                            $kiji = '<div class="message"><p>' . $gkiji . '</p></div>';
                        }
                    } else {
                        global $kiji;
                        $gkiji = $node->html();
                        $kiji = '<div class="message"><p>' . $gkiji . '</p></div>';
                    }
                });
                $array[] = $kijidt . $kiji;
                $i++;
            }
            $scpost = get_option('sc_scpost');
            if ($count > 100) {
                if ($scpost == "100") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50] . $array[51] . $array[52] . $array[53] . $array[54] . $array[55] . $array[56] . $array[57] . $array[58] . $array[59] . $array[60] . $array[61] . $array[62] . $array[63] . $array[64] . $array[65] . $array[66] . $array[67] . $array[68] . $array[69] . $array[70] . $array[71] . $array[72] . $array[73] . $array[74] . $array[75] . $array[76] . $array[77] . $array[78] . $array[79] . $array[80] . $array[81] . $array[82] . $array[83] . $array[84] . $array[85] . $array[86] . $array[87] . $array[88] . $array[89] . $array[90] . $array[91] . $array[92] . $array[93] . $array[94] . $array[95] . $array[96] . $array[97] . $array[98] . $array[99] . $array[100];
                }
            }
            if ($count > 70) {
                if ($scpost == "70") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50] . $array[51] . $array[52] . $array[53] . $array[54] . $array[55] . $array[56] . $array[57] . $array[58] . $array[59] . $array[60] . $array[61] . $array[62] . $array[63] . $array[64] . $array[65] . $array[66] . $array[67] . $array[68] . $array[69] . $array[70];
                }
            }
            if ($count > 50) {

                if ($scpost == "50") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30] . $array[31] . $array[32] . $array[33] . $array[34] . $array[35] . $array[36] . $array[37] . $array[38] . $array[39] . $array[40] . $array[41] . $array[42] . $array[43] . $array[44] . $array[45] . $array[46] . $array[47] . $array[48] . $array[49] . $array[50];
                }

            }
            if ($count > 30) {

                if ($scpost == "30") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10] . $array[11] . $array[12] . $array[13] . $array[14] . $array[15] . $array[16] . $array[17] . $array[18] . $array[19] . $array[20] . $array[21] . $array[22] . $array[23] . $array[24] . $array[25] . $array[26] . $array[27] . $array[28] . $array[29] . $array[30];
                }
            }
            if ($count > 10) {

                if ($scpost == "10") {
                    $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10];
                }
            } else {
                $mes = $array[0] . $array . $array . $array . $array . $array[5] . $array[6] . $array[7] . $array[8] . $array[9] . $array[10];
            }
        }

        global $sc_cat;
        global $sc_posttype;
        $sc_cat = get_option('sc_cat');
        $sc_posttype = get_option('sc_posttype');
        $sc_pst = "'" . $sc_posttype . "'";
        global $wpdb;
        $titleopen = $wpdb->get_results("
            SELECT post_title
            FROM $wpdb->posts
    ");
        $has_title = false;
        foreach ($titleopen as $post) {
            $titlelist = $post->post_title;
        }

        global $has_title;
        if ($has_title == true) {
        } else {
            $replacement = '<img src="$2" />';
            $pattern_jpg = '/<a href=\"https?(?(?!<\/a>).)*\.jpg\"(.*?)\">(.*?)<\/a>/';
            $mes = preg_replace($pattern_jpg, $replacement, $mes);
            $pattern_png = '/<a href=\"https?(?(?!<\/a>).)*\.png\"(.*?)\">(.*?)<\/a>/';
            $mes = preg_replace($pattern_png, $replacement, $mes);
            $pattern2 = '/<img src=\"(.*?)\/\/www\.4gamer\.net\/(.*?)\/SS\/(.*?)\" \/>/';
            $replacement2 = '<img src="$1//www.4gamer.net/$2/TN/$3" />';
            $mes = preg_replace($pattern2, $replacement2, $mes);

            $post_value = array(
                'post_author' => 1,
                'post_title' => $title,
                'post_content' => $mes,
                'post_category' => array($cat),
                'tags_input' => array('', ''),
                'post_status' => $sc_pst
            );
            wp_insert_post($post_value);
            $k++;
        }
    }
}

try {
    global $ita;
    global $ita2;
    global $ita3;
    global $ita4;
    global $ita5;
    global $sc_cat;
    global $sc_cat2;
    global $sc_cat3;
    global $sc_cat4;
    global $sc_cat5;
    $sc_check = get_option('sc_check');
    $sc_check2 = get_option('sc_check2');
    $sc_check3 = get_option('sc_check3');
    $sc_check4 = get_option('sc_check4');
    $sc_check5 = get_option('sc_check5');
    if ($sc_check == "true") {
        ap($ita, $ita, $sc_cat);
    }
    if ($sc_check2 == "true") {
        ap($ita2, $ita2, $sc_cat2);
    }
    if ($sc_check3 == "true") {
        ap($ita3, $ita3, $sc_cat3);
    }
    if ($sc_check4 == "true") {
        ap($ita4, $ita4, $sc_cat4);
    }
    if ($sc_check5 == "true") {
        ap($ita5, $ita5, $sc_cat5);
    }
} catch (Exception $e) {
    function echo_message()
    {
        echo '<div class="message error"><p>エラーが発生しました。</p></div>';
    }
    add_action('admin_notices', 'echo_message');
}

このコードはWordpressの機能を利用して、Wordpressの投稿として記事を作成します。まずコードの流れを簡単に解説をしていきます。

  1. set_time_limit(1800);: PHPのスクリプトの最大実行時間を30分(1800秒)に設定しています。これにより、スクリプトが長時間実行されるのを防ぎます。
  2. require_once(dirname(dirname(dirname(dirname(__FILE__)))) . ‘/wp-load.php’);: WordPressのメインファイルであるwp-load.phpを読み込んでいます。このファイルがないとWordPressの機能を使用できません。
  3. require_once(WP_PLUGIN_DIR . ‘/autopost2ch/vendor/autoload.php’);: 別のファイルを読み込んでいます。WP_PLUGIN_DIRはWordPressプラグインのディレクトリを表します。
  4. use Goutte\Client;: PHPのWebスクレイピングライブラリであるGoutteのClientクラスを使用するための宣言です。
  5. グローバル変数(global $ita, $ita2, $ita3, $ita4, $ita5): グローバル変数を宣言しています。これらの変数は他の関数からもアクセス可能です。
  6. get_option(): WordPressのオプションを読み込んでいます。これらのオプションはプラグインの設定値やユーザーが設定した値を含みます。
  7. 関数ap($ita_shu, $url, $cat): この関数は、指定されたITA(In-Topic Advertising)情報、URL、およびカテゴリを使用してコンテンツを取得し、WordPressに投稿する役割を担います。
  8. さまざまなループと条件文: このコードの主要な部分は、ループと条件文で構成されています。主要な操作の流れは次の通りです。
    • ap()関数内で、指定されたURLからWebページのコンテンツを取得します。
    • コンテンツに対して検査を行い、特定の条件に一致する部分を抽出します。
    • 抽出した情報はWordPressの投稿として登録されます。
  9. wp_insert_post($post_value): WordPressの投稿をデータベースに挿入するための関数です。$post_valueに投稿に関する情報が含まれています。
  10. 例外処理(try/catchブロック): エラーが発生した場合に備えて例外処理が行われています。エラーが発生した場合、エラーメッセージが表示されるようになっています。
            if ($getch == "2ch") {
                if ($ita_shu == "http://hayabusa3.2ch.sc/news/subback.html") {
                    $linknew2 = "http://hayabusa3.2ch.sc/test/read.cgi/news/" . $linknew;
                    echo "ok";
                } elseif ($ita_shu == "http://hayabusa9.2ch.net/mnewsplus/subback.html") {
                    $linknew3 = "http://hayabusa9.2ch.net/test/read.cgi/mnewsplus/" . $linknew;
                } elseif ($ita_shu == "http://lavender.2ch.net/gamenews/subback.html") {
                    $linknew3 = "http://lavender.2ch.net/test/read.cgi/gamenews/" . $linknew;
                }
            } else {
                if ($ita_shu == "http://hayabusa3.2ch.sc/news/subback.html") {
                    $linknew3 = "http://hayabusa3.2ch.sc/test/read.cgi/news/" . $linknew;
                } elseif ($ita_shu == "http://hayabusa3.2ch.sc/mnewsplus/subback.html") {
                    $linknew3 = "http://hayabusa3.2ch.sc/test/read.cgi/mnewsplus/" . $linknew;
                } elseif ($ita_shu == "http://awabi.2ch.sc/gamenews/subback.html") {
                    $linknew3 = "http://awabi.2ch.sc/test/read.cgi/gamenews/" . $linknew;
                }
            }

この部分でどの板のスレッドをスクレイピングするかを指定しています。
必要に応じて書き換えて下さい。

下記リンクより、好きな板を選択し、URLを取得して下さい

https://2ch.sc/2ch.html

サムネイルの自動挿入

「auto-post-thumbnail」を利用することで、掲示板から取得したデータの中の初めの画像をサムネイルとして登録できます。

運用について

自動まとめサイトは記事作成の必要がないため、広告を設置した後は特に作業がございません。以下はアクセスをより増やすアクセストレードの設定に関する記述となります。参考となれば幸いです。

アクセストレード設定

一般的なまとめサイト同様、アクセス増加に繋がる「アンテナサイトとのアクセストレード」の設定を行ってください。

【STEP1.アンテナサイト探し】

アクセストレードを行うため、アンテナサイトへ登録申請を行います。
はじめは自動承認のアンテナサイトへ登録し、アクセスが増え次第、手動承認のアンテナサイトへ登録申請をしてください。

自動承認

http://2chnavi.net/
https://0matome.com/
http://nantoka-antenna.com/

1日100アクセス以上になり次第申請

http://blue-a.org/feeds/show_feeds/
http://2chmatomeru.info/
http://matome-crawler.com/
http://2chmatome-news.com/

1日10,000アクセス以上になり次第申請

http://kita-kore.com/
http://giko-news.com/
http://newsnow-2ch.com/
http://killing-time.biz/
http://besttrendnews.net/
http://news-three-stars.net/
http://matometatta-news.net/

1日100,000アクセス以上になり次第申請

http://newmofu.doorblog.jp/
http://newpuru.doorblog.jp/
http://blog-news.doorblog.jp/

※ジャンル(板)や更新頻度によって登録を受けつけないアンテナサイトもございます。注意事項等ありましたらご確認の上で申請をしてください。
※「https」でサイトを運営される方は「http」のアンテナサイトは「http」のRSSでなければ登録されない場合がございます。
※アクセス数はWordPressログイン後に、左側に表示されている「統計」をクリックで確認できます。

重複スレについて

投稿するスレッドが重複する可能性がございます。

「プラグイン」→「Delete Duplicate Posts」をインストールすることにより、
同じスレッドを自動投稿した場合に、片方を削除することが出来ます。

投稿が上手く行われない場合について

お使いのサーバーや2chのサーバーの状態によって上手く投稿が行われないことがございます。投稿頻度やレス数の削減、その他のプラグイン等の削減で軽減される場合がございます。

広告について

広告は広告会社より広告コードを発行し、任意の場所へ貼り付けます。

忍者AdMax
https://www.ninja.co.jp/admax/

Zucks

申請ページ

「Zucks Ad Networkを試してみる」より申請してください。

nend

申請ページ


「会員登録」よりお進みください。

※外部サイトのため、上記と異なる表記となっている可能性がございます。ご了承くださいませ。

まとめ

利用方法などが分からない、CRONの設定が分からないなどがございましたらお気軽にコメントをいただければ、対応します。

2chなどの掲示板から自動的に記事を生成することは、著作権法上の問題がある可能性があります。特に商業目的での利用には注意が必要です。
また、単にコピペしただけの内容ではGoogleなどの検索エンジンに引っかからない可能性が高く、独自の解説や工夫が必要不可欠です。
その上で、他者の権利を尊重し、公正な情報発信を心がけていただくことをおすすめいたします。技術的に可能だからといって、すべてが正しいわけではありません。社会的責任を果たしながら、技術を活用していくことが大切だと思います。
ご自身のサイト運営の参考にしていただければ幸いです。今後ともよろしくお願いいたします。

皆さんが、このコードを拡張し、さらに便利なツールとして運用されることを楽しみにしています!!