Twitterende Kerstboom
Posted
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:
api gegevens twitter
zoekstring op twitter waarop actie gebaseerd gaat worden
ip adres van de homewizard
switch nummer
mysql database
<?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();
?>