Моя маленькая дочь и я настроили немного PHP / HMTL, чтобы собрать воедино три разные случайные строки (книжные сюжеты) и твитить их как часть жаворонков Всемирного дня книги.
Все работает нормально (через здесь: http://www.cybrid.co.uk/plotterbot) ЗА ИСКЛЮЧЕНИЕМ PHP, кажется, выполняется второй или третий раз после загрузки страницы, так что эта вещь твитит 2-3 раза в быстрой последовательности. Строки в твиттере отличаются каждый раз, поэтому очевидно, что они перевыбирают новые случайные строки и повторяют твиты (через https://twitter.com/PlotterBot). Страница фактически не перезагружается, поэтому строки, отображаемые в HTML, не обновляются, только биты PHP.
Я пробовал подход сессионной переменной, но безрезультатно. У меня также был старый добрый взгляд по другим причинам / решениям, но ничего не найдено. Я тут безвозвратно тусклый? Почему эта вещь в безумном твите? Я немного упростил следующий код, но не думаю, что пропустил что-то важное. Какие-нибудь мысли?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
$caption1 = rand (1, 1); $caption2 = rand (1, 1); $caption3 = rand (1, 1);
$source = array("Blah Blah Blah");
$author = array("Blah Blah Blah");
$gender = array("M");
$element1 = array("Blah Blah Blah");
$element2 = array("Blah Blah Blah");
$element3 = array("Blah Blah Blah");
?>
<title>PlotterBot</title>
</head>
<body>
<?php
// Enable error reporting
ini_set('display_errors', 1);
// Call Twitter API/libraries
require_once('TwitterAPIExchange.php');
require_once('twitteroauth.php');
// Set access tokens here - see: https://dev.twitter.com/apps/
$consumerKey = "SecretStuff";
$consumerSecret = "SecretStuff";
$accessToken = "SecretStuff";
$accessTokenSecret = "SecretStuff";
// Create object
$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
// Set status message (assemble literary sources clauses 1-3, omitting no-author books)
if ($author[$caption1-1] == "") { $author1 = ''; } else { $author1 = ' by '.$author[$caption1-1]; }
if ($author[$caption2-1] == "") { $author2 = ''; } else { $author2 = ' by '.$author[$caption2-1]; }
if ($author[$caption3-1] == "") { $author3 = ''; } else { $author3 = ' by '.$author[$caption3-1]; }
// Set status message (assemble literary sources Tweet string)
$tweetMessage1 = '↳ Literary sources plundered: '.$source[$caption1-1].$author1.', '.$source[$caption2-1].$author2.' and '.$source[$caption3-1].$author3.'. Check @PlotterBot for #PlotIdeas #PlotPrompts #WritersBlock or go to: Blah Blah Blah';
// Set status message (assemble mash-up Tweet string)
$tweetMessage2 = $element1[$caption1-1].$part2.$part3;
?>
<!-- The plot cue -->
<p><?php echo $element1[$caption1-1];?><?php echo $part2;?><?php echo $part3;?></p><hr class="style4"><p>
<!-- The literary sources plundered -->
<span class="subber">Literary sources plundered: <span style="font-style: italic;"><?php echo $source[$caption1-1];?></span><?php if ($author[$caption1-1] == "") { echo ""; } else { echo " by ",$author[$caption1-1]; } ?>, <span style="font-style: italic;"><?php echo $source[$caption2-1];?></span><?php if ($author[$caption2-1] == "") { echo ""; } else { echo " by ",$author[$caption2-1]; } ?> and <span style="font-style: italic;"><?php echo $source[$caption3-1];?></span><?php if ($author[$caption3-1] == "") { echo ""; } else { echo " by ",$author[$caption3-1]; } ?>. Automatically Tweeted via <a href="https://twitter.com/PlotterBot" target="_blank">@Plotterbot</a>. <a href="#" onclick="window.location.reload(true);">Click here</a> to generate a new mash-up.</span></p>
<?php
session_start();
if(isset($_SESSION['user']))
{
// Session has been set, so don't execute the script
exit();
}
else
{
// Set the session now
$_SESSION['user'] = "whatever";
// Execute the script
// Check for 280 characters (Literary sources Tweet)
if(strlen($tweetMessage1) <= 280)
{
// Post the status message
$tweet->post('statuses/update', array('status' => $tweetMessage1));
}
// Check for 280 characters (Literary mash-up Tweet)
if(strlen($tweetMessage2) <= 280)
{
// Post the status message
$tweet->post('statuses/update', array('status' => $tweetMessage2));
}
// Then when script has finished running, you can unset the session so that the page can be run again
unset($_SESSION['user']);
}
?>
</body>
</html>
Задача ещё не решена.
Других решений пока нет …