Предположим, у вас в блоге довольно много достойных постов, и вам интересно, есть ли способ публиковать их в Twitter/Facebook (или других социальных сетях) автоматически и регулярно.
Это несложно. Хотя этот пост поможет вам публиковать сообщения в твиттере, принцип аналогичен для других социальных сетей. В этом посте представлена функция PHP для публикации в твиттере.
Мы не хотим публиковать один и тот же контент/статьи снова и снова в течение короткого периода времени. Поэтому нам нужно создать таблицу SQL, в которой хранится история переопубликованных постов.
--
-- Table structure for table `twitter`
--
CREATE TABLE IF NOT EXISTS `twitter` (`id` bigint(32) unsigned NOT NULL,
`url` varchar(255) NOT NULL,
`posttime` datetime NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
В таблице есть три поля: одно — первичный ключ (автоматическое увеличение), второе — URL-адрес, который был повторно опубликован, а третье — дата и время.
Все поля должны быть правильно проиндексированы.
ALTER TABLE `twitter`
ADD PRIMARY KEY (`id`), ADD KEY `url` (`url`,`posttime`), ADD KEY `posttime` (`posttime`);
Теперь, если у вас есть WordPress, вам нужно запросить действительные сообщения и случайным образом выбрать одно из них.
// database constants
require('db.php');
// twitter function
require('twitter.php');
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME);
$today = date("Y-m-d h:i:s");
// get total number of valid posts
$query = "
select
count(1)
from
`wp_posts`
where
(`post_type` = 'page' or `post_type` = 'post') and
(`post_status` = 'publish')
";
$result = mysql_query($query) or die(mysql_error());
$total = mysql_result($result, 0, 0);
$cnt = 0;
if ($total > 0) {
while (1) {
// pick a random npost
$idx = mt_rand(0, $total - 1);
$query = "
select
`post_name`, `post_title`
from
`wp_posts`
where
(`post_type` = 'page' or `post_type` = 'post') and
(`post_status` = 'publish')
limit $idx, 1
";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
// post URL
$url = "<a class="vglnk" target="_blank" href="http://www.codingforspeed.com/".$row['post_name']."/" rel="nofollow"><span>http</span><span>://</span><span>www</span><span>.</span><span>codingforspeed</span><span>.</span><span>com</span><span>/".$</span><span>row</span><span>['</span><span>post</span><span>_</span><span>name</span><span>']."/</span></a>";
$title = $row['post_title'];
$query2 = "select date(`posttime`) from `twitter` where `url` = '$url' order by `posttime` desc limit 1";
$result2 = mysql_query($query2) or die(mysql_error());
if (mysql_num_rows($result2) > 0) {
$last = mysql_result($result2, 0, 0);
// last reposted date/time
$diff = abs((strtotime($today) - strtotime($last)) / 24 / 3600);
if ($diff <= 90) {
$cnt ++;
if ($cnt > 16) { // max retry time to avoid endless loop
break;
}
continue; // try next random post
}
}
// record the post in the table
$query = "
insert into `twitter`
set
`url` = '$url',
`posttime` = '$today'
";
mysql_query($query) or die(mysql_error());
$msg = "#Repost ".$title;
echo "$msg $url";
postTwitter($msg, $url);
break;
}
}
Идея здесь состоит в том, чтобы получить случайный пост и проверить, был ли он повторно опубликован за последние 90 дней (при необходимости изменить), если нет, опубликовать его и записать в базу данных. В противном случае попробуйте следующие случайные сообщения, пока не будет сделано несколько попыток. Если такие «действительные» сообщения не найдены (например, нет новых статей в течение длительного времени), он обнаружит это и прервет цикл.
Также проверьте этот пост для получения случайной строки с использованием SQL.
Следующее, что нужно сделать, это правильно протестировать его и поместить в crontab, например, один раз в день.
0 8 * * * php /home/justyy.lai/auto.php > /dev/null 2>&1
Публикация сообщений в Twitter настраивается, и я добавил хэш-тег «#Repost», чтобы отличать его от других обычных сообщений. Я также связываю свою учетную запись в Twitter со страницей в Facebook, чтобы каждый раз, когда твиты публикуются в Twitter, статус также синхронизируется, что намного проще для меня.