Twitterende Kerstboom

by marc 22. december 2013 06:00

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();

 

?>


Tags:

Wilde Ideeën