我有一个网站,我们有一个播放器(单击下面的链接访问它) FillyRadio Player
有一个图像位于背景之间和波形画布的前面。
我需要根据 Google 日历时间表将此图像更改为各种演示者的不同图片(这比每次更改时间表时都使用代码更容易)。
有什么方法可以根据谷歌日历改变这个 img src 标签?
注意:我对使用 API 非常陌生,因此不胜感激!
我对这种方法并不挑剔,只要它适用于 Chrome 和 Firefox。
我有一个网站,我们有一个播放器(单击下面的链接访问它) FillyRadio Player
有一个图像位于背景之间和波形画布的前面。
我需要根据 Google 日历时间表将此图像更改为各种演示者的不同图片(这比每次更改时间表时都使用代码更容易)。
有什么方法可以根据谷歌日历改变这个 img src 标签?
注意:我对使用 API 非常陌生,因此不胜感激!
我对这种方法并不挑剔,只要它适用于 Chrome 和 Firefox。
保持该方法尽可能用户友好(在图像更新方面)而不必依赖耗时的实现(即用户友好的界面)的关键是确定可以轻松传达算法更改的元素. 毫无疑问,这些元素就是图像文件(它们的名称)。我很快提出了一个命名约定,可以提供您想要的内容(尽管您预计会对其进行高度改进):
07-23-2013_2.jpg (or .png or any pic extension)
3_1.jpg
所有名称都包含一个“_”,它将第一个元素(“值”)与第二个元素(“持续时间”)分开。该值可以是某个日期(mm-dd-yyyy)或一个计数器:某个日期意味着该图像必须在这一天使用,无论如何;计数器是默认行为:如果没有给定日期的图片,算法将通过关注此计数器来考虑下一张。持续时间是指给定图片预计会上升的天数。
为了正确解释我的观点,我创建了一个代码来说明上述命名结构。但是,请正确理解这个答案的意图:这只是为了向您展示一个替代解决方案,因此我希望您能大量更改/改进此代码。
<?php
$goAhead = true;
$today = strtotime(date('Y') . "-" . date('m') . "-" . date('d'));
$lastValue = 0;
//Checking the last stored date and value
if(file_exists ("./config.ini"))
{
$lines = file("./config.ini");
if(count($lines) >= 2)
{
if(strstr($lines[0],'-'))
{
$temp = explode ('-' , $lines[0] );
$goAhead = false;
if(isDateGreaterEqual($temp, $today, false))
{
//The pic has to be changed no matter what
$lastValue = (int)$lines[1];
$goAhead = true;
}
}
}
}
$bestVal = $lastValue;
$bestDuration = 0;
$dirName = './images';
$selectedPic = "";
$bestPic = "";
foreach(glob($dirName . '/*.*') as $file)
{
if(strstr($file,'_') && strstr($file,'.'))
{
$ext = pathinfo($file, PATHINFO_EXTENSION);
$fileNoExtension = basename($file, "." . $ext);
$temp = explode ('_' , $fileNoExtension );
$startVal = $temp[0]; //Date or number
$duration = $temp[1]; //Number of days the given pic will be up
if(strstr($startVal,'-'))
{
$temp = explode ('-' , $startVal );
if(isDateGreaterEqual($temp, $today, true))
{
//If the pic has today's date, the change has to be performed no matter what
updateConfig($duration, $lastValue);
$selectedPic = $file;
break;
}
}
else if($goAhead)
{
//Only in cases where the pic has to be updated
if((int)startVal < $bestVal)
{
$bestVal = (int)startVal;
$bestDuration = $duration;
$bestPic = $file;
}
}
}
}
if($bestPic != "")
{
$selectedPic = $bestPic;
updateConfig($bestDuration, $bestVal);
}
if($selectedPic != "")
{
//$selectedPic -> path of the new image
}
function isDateGreaterEqual($temp, $today, $justEqual)
{
$conditionMet = false;
if(count($temp) == 3)
{
if(checkdate((int)$temp[0], (int)$temp[1], (int)$temp[2]))
{
$stored_date = strtotime($temp[2] . "-" . $temp[0] . "-" . $temp[1]);
if((!$justEqual && $today >= $stored_date) || ($justEqual && $today == $stored_date))
{
//The pic has to be changed no matter what
$conditionMet = true;
}
}
}
return $conditionMet;
}
function updateConfig($duration, $curVal)
{
$finalDate = date('m-d-Y', strtotime("+" . $duration . " days"));
$file = fopen('./config.ini', 'w') or die("can't open file");
fwrite($file, $finalDate . "\r\n");
fwrite($file, $curVal);
fclose($file);
}
?>
此代码期望图片(名称如上所述)存储在文件夹中images
。它将当前配置(显示给定图片的日期和给定计数器)存储在一个名为config.ini
. 此代码的输出$selectedPic
可能为空白(没有图片更改)或包含新图片的文件名。预计将定期调用此代码(每天只需一次就足够了)。
这个提议的重点是避免(通常是有问题和不稳定的)对外部 API 的复杂调用,以执行可以在内部轻松完成的操作;也就是说,仅仅是概念验证。