0

我有一个网站,我们有一个播放器(单击下面的链接访问它) FillyRadio Player

有一个图像位于背景之间和波形画布的前面。

我需要根据 Google 日历时间表将此图像更改为各种演示者的不同图片(这比每次更改时间表时都使用代码更容易)。

有什么方法可以根据谷歌日历改变这个 img src 标签?

注意:我对使用 API 非常陌生,因此不胜感激!

我对这种方法并不挑剔,只要它适用于 Chrome 和 Firefox。

4

1 回答 1

0

保持该方法尽可能用户友好(在图像更新方面)而不必依赖耗时的实现(即用户友好的界面)的关键是确定可以轻松传达算法更改的元素. 毫无疑问,这些元素就是图像文件(它们的名称)。我很快提出了一个命名约定,可以提供您想要的内容(尽管您预计会对其进行高度改进):

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 的复杂调用,以执行可以在内部轻松完成的操作;也就是说,仅仅是概念验证。

于 2013-07-23T10:45:59.450 回答