<?php

// set date and time
date_default_timezone_set("Europe/Berlin");
$day = date(d);
$month = date(m);
$dayName = date(jS);
$monthName = date(F);
$year = intval(date(Y)) - 1;
$offsetYears = intval(date(Y) - $year);

// Get html via curl
$ch = curl_init("http://kudusch.de/tweetnest/{$year}/{$month}/{$day}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$page = curl_exec($ch);
curl_close($ch);

//clean html
$doc = new DOMDocument();
$doc->loadHTML($page);
$element = $doc->getElementById('days');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('secondary');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('footer');
$element->parentNode->removeChild($element);
$doc->getElementsByTagName("title")->item(0)->nodeValue = "Twitter memories of {$monthName} {$dayName}";
$doc->getElementsByTagName("h1")->item(0)->nodeValue = "<span id=\"titledate\">{$monthName} {$dayName}</span>, {$offsetYears} year ago.";
$page = $doc->saveHTML();

$content1 = preg_replace('%<div class="nextprev">(.*?)</div>%i', '', $page);
$content1 = htmlspecialchars_decode($content1);

//write html
file_put_contents("memo.html", "");
file_put_contents("memo.html", $content1);

//NEXT YEAR

// set date and time
$day = date(d);
$month = date(m);
$year = intval(date(Y)) - 2;
$offsetYears = intval(date(Y) - $year);

// Get html via curl
$ch = curl_init("http://kudusch.de/tweetnest/{$year}/{$month}/{$day}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$page = curl_exec($ch);
curl_close($ch);

//clean html
$doc = new DOMDocument();
$doc->loadHTML($page);
$element = $doc->getElementById('days');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('secondary');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('top');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('search');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('footer');
$element->parentNode->removeChild($element);
$doc->getElementsByTagName("h1")->item(0)->nodeValue = "<span id=\"titledate\">{$monthName} {$dayName}</span>, {$offsetYears} years ago.";
$page = $doc->saveHTML();
$content2 = preg_replace('%<div class="nextprev">(.*?)</div>%i', '', $page);
$content2 = preg_replace('%<head>(.*?)</head>%i', '', $content2);
$content2 = htmlspecialchars_decode($content2);

file_put_contents("memo.html", $content2,FILE_APPEND);

//NEXT YEAR

// set date and time
$day = date(d);
$month = date(m);
$year = intval(date(Y)) - 3;
$offsetYears = intval(date(Y) - $year);

// Get html via curl
$ch = curl_init("http://kudusch.de/tweetnest/{$year}/{$month}/{$day}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$page = curl_exec($ch);
curl_close($ch);

//clean html
$doc = new DOMDocument();
$doc->loadHTML($page);
$element = $doc->getElementById('days');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('secondary');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('top');
$element->parentNode->removeChild($element);
$element = $doc->getElementById('search');
$element->parentNode->removeChild($element);
$doc->getElementsByTagName("h1")->item(0)->nodeValue = "<span id=\"titledate\">{$monthName} {$dayName}</span>, {$offsetYears} years ago.";
$page = $doc->saveHTML();

$content3 = preg_replace('%<div class="nextprev">(.*?)</div>%i', '', $page);
$content3 = preg_replace('%<head>(.*?)</head>%i', '', $content3);
$content3 = htmlspecialchars_decode($content3);

file_put_contents("memo.html", $content3,FILE_APPEND);

// convert external css to inline style using premailer
/**
 * Premailer API PHP class
 * Premailer is a library/service for making HTML more palatable for various inept email clients, in particular GMail
 * Primary function is to convert style tags into equivalent inline styles so styling can survive <head> tag removal
 * Premailer is owned by Dialect Communications group
 * @link http://premailer.dialect.ca/api
 * @author Marcus Bointon <[email protected]>
 */
 
class Premailer {
	/**
	 * The Premailer API URL
	 */
	const ENDPOINT = 'http://premailer.dialect.ca/api/0.1/documents';
	static $CI ;
	public function __construct()
	{
		self::$CI =& get_instance();
		self::$CI->load->library('my_curl');
		
	}
	/**
	 * Central static method for submitting either an HTML string or a URL, optionally retrieving converted versions
	 * @static
	 * @throws Exception
	 * @param string $html Raw HTML source
	 * @param string $url URL of the source file
	 * @param bool $fetchresult Whether to also fetch the converted output
	 * @param string $adaptor Which document handler to use (hpricot (default) or nokigiri)
	 * @param string $base_url Base URL for converting relative links
	 * @param int $line_length Length of lines in the plain text version (default 65)
	 * @param string $link_query_string Query string appended to links
	 * @param bool $preserve_styles Whether to preserve any link rel=stylesheet and style elements
	 * @param bool $remove_ids Remove IDs from the HTML document?
	 * @param bool $remove_classes Remove classes from the HTML document?
	 * @param bool $remove_comments Remove comments from the HTML document?
	 * @return array Either a single strclass object containing the decoded JSON response, or a 3-element array containing result, html and plain parts if $fetchresult is set
	 */
	protected static function convert($html = '', $url = '', $fetchresult = true, $adaptor = 'hpricot', $base_url = '', $line_length = 65, $link_query_string = '', $preserve_styles = true, $remove_ids = false, $remove_classes = false, $remove_comments = false) {
		$params = array();
		if (!empty($html)) {
			$params['html'] = $html;
		} elseif (!empty($url)) {
			$params['url'] = $url;
		} else {
			throw new Exception('Must supply an html or url value');
		}
		if ($adaptor == 'hpricot' or $adaptor == 'nokigiri') {
			$params['adaptor'] = $adaptor;
		}
		if (!empty($base_url)) {
			$params['base_url'] = $base_url;
		}
		$params['line_length'] = (integer)$line_length;
		if (!empty($link_query_string)) {
			$params['link_query_string'] = $link_query_string;
		}
		$params['preserve_styles'] = ($preserve_styles?'true':'false');
		$params['remove_ids'] = ($remove_ids?'true':'false');
		$params['$remove_classes'] = ($remove_classes?'true':'false');
		$params['$remove_comments'] = ($remove_comments?'true':'false');
		$options = array(
			'timeout' => 15,
			'connecttimeout' => 15,
			'useragent' => 'PHP Premailer',
			'ssl' => array('verifypeer' => false, 'verifyhost' => false)
		);
	//	$h = new HttpRequest(self::ENDPOINT, HttpRequest::METH_POST, $options);
		
	
		$conf = array(
				'url'	=> self::ENDPOINT,
				'timeout' => 15,
				'useragent' => 'PHP Premailer',
				'ssl_verifyhost'	=> 0,
				'SSL_VERIFYPEER'	=> 0,
				'post'		=> 1,
				'postfields' => $params,
				'returntransfer' => true,
				'httpheader' => array("Expect:")
			);
		
		foreach($conf as $key => $value){
			$name = constant('CURLOPT_'.strtoupper($key));
			$val  = $value;
			$data_conf[$name] = $val;
		}
		$cu = curl_init();
		curl_setopt_array($cu, $data_conf);
		$exec = curl_exec($cu);	
		$_res			= json_decode($exec);
		$_res_info 	= json_decode(json_encode(curl_getinfo($cu))); 	
		curl_close($cu);
		if($_res_info->http_code != 201){
			$code = $_res_info->http_code;
			switch ($code) {
				case 400:
					throw new Exception('Content missing', 400);
					break;
				case 403:
					throw new Exception('Access forbidden', 403);
					break;
				case 500:
				default:
					throw new Exception('Error', $code);
			}
			
		}
		$return = array('result' => $_res);
		if ($fetchresult) {
			$html = curl_init();
			curl_setopt_array(
					$html, array(
						CURLOPT_URL 			=> $_res->documents->html,
						CURLOPT_TIMEOUT 		=> 15,
						CURLOPT_USERAGENT 		=> 'PHP Premailer',
						CURLOPT_SSL_VERIFYHOST	=> 0,
						CURLOPT_SSL_VERIFYPEER	=> 0,
						CURLOPT_HTTPHEADER 		=> array("Expect:"),
						CURLOPT_RETURNTRANSFER 	=> true
					)
				);
			$return['html'] = curl_exec($html);
			curl_close($html);
			
			$plain = curl_init();
			curl_setopt_array(
					$plain, array(
						CURLOPT_URL 			=> $_res->documents->txt,
						CURLOPT_TIMEOUT 		=> 15,
						CURLOPT_USERAGENT 		=> 'PHP Premailer',
						CURLOPT_SSL_VERIFYHOST	=> 0,
						CURLOPT_SSL_VERIFYPEER	=> 0,
						CURLOPT_HTTPHEADER 		=> array("Expect:"),
						CURLOPT_RETURNTRANSFER 	=> true
					)
				);
			$return['plain'] = curl_exec($plain);
			curl_close($plain);
		
			return $return;
		}
		return $result;
		
	}
 
	/**
	 * Central static method for submitting either an HTML string or a URL, optionally retrieving converted versions
	 * @static
	 * @throws Exception
	 * @param string $html Raw HTML source
	 * @param bool $fetchresult Whether to also fetch the converted output
	 * @param string $adaptor Which document handler to use (hpricot (default) or nokigiri)
	 * @param string $base_url Base URL for converting relative links
	 * @param int $line_length Length of lines in the plain text version (default 65)
	 * @param string $link_query_string Query string appended to links
	 * @param bool $preserve_styles Whether to preserve any link rel=stylesheet and style elements
	 * @param bool $remove_ids Remove IDs from the HTML document?
	 * @param bool $remove_classes Remove classes from the HTML document?
	 * @param bool $remove_comments Remove comments from the HTML document?
	 * @return array Either a single element array containing the 'result' object, or three elements containing result, html and plain if $fetchresult is set
	 */
	public static function html($html, $fetchresult = true, $adaptor = 'hpricot', $base_url = '', $line_length = 65, $link_query_string = '', $preserve_styles = true, $remove_ids = false, $remove_classes = false, $remove_comments = false) {
		return self::convert($html, '', $fetchresult, $adaptor, $base_url, $line_length, $link_query_string, $preserve_styles, $remove_ids, $remove_classes, $remove_comments);
	}
 
	/**
	 * Central static method for submitting either an HTML string or a URL, optionally retrieving converted versions
	 * @static
	 * @throws Exception
	 * @param string $url URL of the source file
	 * @param bool $fetchresult Whether to also fetch the converted output
	 * @param string $adaptor Which document handler to use (hpricot (default) or nokigiri)
	 * @param string $base_url Base URL for converting relative links
	 * @param int $line_length Length of lines in the plain text version (default 65)
	 * @param string $link_query_string Query string appended to links
	 * @param bool $preserve_styles Whether to preserve any link rel=stylesheet and style elements
	 * @param bool $remove_ids Remove IDs from the HTML document?
	 * @param bool $remove_classes Remove classes from the HTML document?
	 * @param bool $remove_comments Remove comments from the HTML document?
	 * @return array Either a single element array containing the 'result' object, or three elements containing result, html and plain if $fetchresult is set
	 */
	public static function url($url, $fetchresult = true, $adaptor = 'hpricot', $base_url = '', $line_length = 65, $link_query_string = '', $preserve_styles = true, $remove_ids = false, $remove_classes = false, $remove_comments = false) {
		return self::convert('', $url, $fetchresult, $adaptor, $base_url, $line_length, $link_query_string, $preserve_styles, $remove_ids, $remove_classes, $remove_comments);
	}
}
 
//premailer
$url = "http://kudusch.de/memo.html";
$pre = Premailer::url($url);
$html = $pre['html'];

// Set up parameters for mail
$to = "[email protected]";
$subject = "Twitter memories of {$monthName} {$dayName}";
$message = $html;
$from = "[email protected]";
$headers = "MIME-Version: 1.0" . "\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\n";
$headers .= "From: $from" . "\n";

// Send email
mail($to,$subject,$message,$headers);

// Output for debugging
echo "Done.\n";

?>