<?php
/*
Title: 4chan Ripper
Description: Searches the first webpage of an image board on 4chan for
A list of pages, searches those pages for threads, searches
those threads for images, downloads the images to a folder
based on date and image board.
*/
set_time_limit(300000000000); //Depending on the internet connection used, this can take quite
//A while...
//getSourceList looks at the bottom of the main page of an image board. It looks for links, and
//if it finds a link, it'll add it to an array of "Source Pages". These are checked for
//"Sub-source Pages."
function getSourceList($origUrl)
{
$justBeforePos = "";
$justAfterPos = "";
$sourceList = array();
$url = file($origUrl);
array_push($sourceList, $origUrl);
for($i=0;$i<count($url);$i++)
{
if(strpos($url[$i], 'document.delform.pwd.value=get_pass("4chan_pass");'))
{
for($j=10;$j>=0;$j--)
{
if(strpos($url[$i], '[<a href="' . $j . '.html">' . $j . '</a>]'))
{
array_push($sourceList, $origUrl . $j . '.html');
}
}
}
}
return($sourceList);
}
//getSubSourceList searches every page in the source list for threads. Threads are marked with
//the string "[Reply]". These threads are added to a list, and passed to the getPictureList
//function.
function getSubSourceList($sourceList, $origUrl)
{
$justBeforePos = "";
$justAfterPos = "";
$subSourceList = array();
for($j=0;$j<count($sourceList);$j++)
{
$url = file($sourceList[$j]);
for($i=0;$i<count($url);$i++)
{
if(strpos($url[$i], 'Reply</a>]</span>'))
{
$justAfterPos = strpos($url[$i], 'Reply</a>]</span>') - 2;
$justBeforePos = strrpos($url[$i], '[<a href="') + strlen('[<a href="');
array_push($subSourceList, ($origUrl . substr($url[$i], $justBeforePos, ($justAfterPos - $justBeforePos))));
}
}
}
return($subSourceList);
}
//This searches the threads for posts with pictures in them. When it finds them, it extracts the
//link to the file, and adds it to a list of pictures.
function getPictureList($subSourceList, $origUrl)
{
$justBeforePos = "";
$justAfterPos = "";
$pictureList = array();
for($i=0;$i<count($subSourceList);$i++)
{
$url = file($subSourceList[$i]);
for($j=0;$j<count($url);$j++)
{
if(strpos($url[$j], '<span class="filesize">'))
{
$justAfterPos = strpos($url[$j], '" target="_blank">');
$justBeforePos = strpos($url[$j], 'File :<a href="') + strlen('File :<a href="');
array_push($pictureList, substr($url[$j], $justBeforePos, ($justAfterPos - $justBeforePos)));
}
}
}
return($pictureList);
}
function($pictureList, $url)
{
//Make the folder
$folder = 'pictures\\' . substr($url, (strlen($url) - 2), 1) . '_' . date(d-m-y_H:i:s);
if(!is_dir($folder))
{
mkdir($folder);
}
//Copy the pictures
for($i=0;$i<count($pictureList);$i++)
{
if(!is_file($folder.'\\'.basename($pictureList[$i])))
{
copy($pictureList[$i],$folder.'\\'.basename($pictureList[$i]));
}
}
}
$url = 'http://cgi.4chan.org/s/'; //This is the address of the image board.
/*
$SL = getSourceList($url);
$SSL = getSubSourceList($SL, $url);
$PL = getPictureList($SSL,$url);
copyPictures($PL);
*/
//Test Area
$SSL = array("http://cgi.4chan.org/s/res/926833.html");
$PL = getPictureList($SSL, $url);
copyPictures($PL);
?>