Twitterende Kerstboom

De kerstboom aan de tijdschakelaar? Nee, laat de mensen op internet onze kerstboom maar aan en uitzetten!

Benodigdheden:

klikaan klikuit schakelaar – om de kerstverlichting aan en uit te kunnen zetten

homewizard – om de klikaan klikuitschakelaar aan te kunnen sturen

phpscript – om tweets met een bepaalde hashtag te kunnen lezen, op te slaan in db, laatste (onbehandelde) tweet(s) te selecteren en dan de actie voor de schakelaar te gaan bepalen.

cronscript – iedere x minuten het phpscript uitvoeren. eerst gezet op 1 minuut. Maar voor de vrouw-des-huizes-acceptatiefactor later op 10 minuten gezet. (dit had eventueel ook met een keuze voor een andere hashtag beinvloed kunnen worden.

onderstaande script aanpassen/invullen:

	<?php
	ini_set('display_errors', 1);
	require_once('TwitterAPIExchange.php');
	
	/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
	$settings = array(
	    'oauth_access_token' => "token",
	    'oauth_access_token_secret' => "secret",
	    'consumer_key' => "key",
	    'consumer_secret' => "secret"
	);
	
	/** Perform a GET request and echo the response **/
	/** Note: Set the GET field BEFORE calling buildOauth(); **/
	
	$url = 'https://api.twitter.com/1.1/search/tweets.json';
	$getfield = '?q=%23zetdiekerstboommaar&result_type=recent';
	$q = 'zetdiekerstboommaar';
	$requestMethod = 'GET';
	$twitter = new TwitterAPIExchange($settings);
	$response = $twitter->setGetfield($getfield)
	             ->buildOauth($url, $requestMethod)
	             ->performRequest();
	
	/**var_dump(json_decode($response,true));**/
	
	$jsonobj=json_decode($response,true);
	
	if($jsonobj != null){
		$con = mysql_connect('host', 'dbname', 'user');
	 if (!$con){
	die('Could not connect: ' . mysql_error());
	}
	
	 foreach($jsonobj['statuses'] as $item){
	        /**var_dump($item);**/
		$id = $item['id'];
		$created_at = $item['created_at'];
		$created_at = strtotime($created_at);
		$mysqldate = date('Y-m-d H:i:s',$created_at);
		$from_user = mysql_real_escape_string($item['user']['screen_name']);
              	if ($from_user == "") { $from_user = mysql_real_escape_string($item['user']['name']);}
			$from_user_id = 0;
		$text = mysql_real_escape_string($item['text']);
		$source = mysql_real_escape_string($item['source']);
		$geo = $item['geo'];
		$iso_language_code = "en";
		$profile_image_url = "na";
		$to_user_id = 0;
	
		mysql_select_db("tweets", $con);
		$query = "INSERT into tweets VALUES ($id,'$mysqldate','$from_user',$from_user_id,'$text','$source','$geo','$iso_language_code','$profile_image_url',$to_user_id,'$q','0')";
		$result = mysql_query($query);
		}
	mysql_close($con);
	}
	
	/** determine requested switchaction **/
	
	$con = mysql_connect('host', 'dbname', 'user');
	if (!$con)
	{ die('Could not connect: ' . mysql_error()); }

	$query="SELECT t.id, t.from_user, t.text, t.created_at FROM tweets.tweets t,(SELECT max(id) as maxid FROM tweets.tweets) maxresults WHERE t.id = maxresults.maxid AND t.used=0 AND t.from_user like '%' AND t.id > (SELECT max(t2.id) FROM tweets.tweets t2 WHERE t2.used = 1)";
	$result=mysql_query($query);
	$num=mysql_numrows($result);
	
	mysql_close();
	
	$OnOff="empty";
	$user="nobody";
	$i=0;
	while ($i < $num) 
	{
		$OnOff=mysql_result($result,$i,"text");
		$user=mysql_result($result,$i,"from_user");
		echo $OnOff."<br>";
		echo $user."<br>";
		$i++;
	}
	
	
	$action="Neutral";
	if (strchr($OnOff,"zetdiekerstboommaaraan")) {$action="On";}
	if (strchr($OnOff,"zetdiekerstboommaaruit")) {$action="Off";}
	echo $action;
	
	/** get switch status **/
	
	$jsonurl = "http://192.168.x.x/password/get-sensors";
	$json = file_get_contents($jsonurl);
	$data = json_decode($json,true);
	$switches =  $data['response']['switches'];
	
	$stand = "onbekend";
	foreach($switches as $switch){
        	/**echo $switch['id']." <br>";
        	echo $switch['name']." <br>";
        	echo $switch['status']."<br>";**/
		if ($switch['id']=="0" and $switch['status']=="off"){ $stand="Off";}
		if ($switch['id']=="0" and $switch['status']=="on"){ $stand="On";}
	}
	
	echo $stand."<br>";
	
	/** do actions **/

	/** action: set switch **/
	if ($stand=="Off" and $action=="On") 
	{
		shell_exec("wget 'http://192.168.x.x/password/sw/0/on'");
	}
	if ($stand=="On" and $action=="Off") 
	{
		shell_exec("wget 'http://192.168.x.x/password/sw/0/off'");
	}

	/** action: tweet **/
	
	$consumerKey = 'key';
	$consumerSecret = 'secret';
	$oAuthToken = 'token';
	$oAuthSecret = 'secret';
	
	include 'twitteroauth/twitteroauth.php';
	$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);
	/**if ($action=="Neutral") 
	{  $text = "$user bedankt";
	$tweet->post('statuses/update', array('status' => "$text"));
	}**/
	
	if ($stand=="Off" and $action=="On") 
	{  
		$text = "$user heeft mij aangezet!";
		$tweet->post('statuses/update', array('status' => "$text"));
	}
	
	if ($stand=="Off" and $action=="Off") 
	{
		$text = "$user wilde mij uitzetten, maar ik stond al uit";
		$tweet->post('statuses/update', array('status' => "$text"));
	}
	
	if ($stand=="On" and $action=="Off") 
	{  $text = "$user heeft mij uitgezet..";
		$tweet->post('statuses/update', array('status' => "$text"));
	}
	
	if ($stand=="On" and $action=="On") 
	{  $text = "$user wilde mij aanzetten, maar ik stond al aan";
		$tweet->post('statuses/update', array('status' => "$text"));
	}
	echo $text;
	
	
	/** action: update db **/
	$con = mysql_connect('host', 'dbname', 'user');
	if (!$con)
	{
		die('Could not connect: ' . mysql_error());
	}
	
	
	$query=" UPDATE tweets.tweets SET used=1";
	$result=mysql_query($query);
	mysql_close();
	 
	?>
comments powered by Disqus