Динамический iCal, созданный из базы данных, не работающей

Можно на самом деле сделать что-то, действительно охлаждаются в Python для решения этого. Можно создать понимание списка, которое сослалось бы на себя, поскольку оно создается. Следующим образом:

   # remove duplicates...
   def unique(my_list):
       return [x for x in my_list if x not in locals()['_[1]'].__self__]

Редактирование: я удалил "сам", и это работает над Mac OS X, Python 2.5.1.

_ [1] является "секретной" ссылкой Python на новый список. Вышеупомянутое, конечно, немного грязно, но Вы могли адаптировать его, соответствуют Вашим потребностям по мере необходимости. Например, можно на самом деле записать функцию, которая возвращает ссылку на понимание; это посмотрело бы больше как:

return [x for x in my_list if x not in this_list()]
<час>
7
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

Thanks to Mohammad's help, we deduced that it was the indented code adding whitespace to the ics file that was causing the errors. M's suggestion to use \n linebreaks didn't work, but manually hitting enter to create linebreaks, but without indenting the next line, seems to have done it. Here's the code that works:

<?php
require_once('../../_includes/initialize.php');

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
";

$slots = Slot::find_all();
foreach($slots as $slot) {
$job = Job::find_by_id($slot->job_id);

$start_stamp = strtotime($slot->start);
$end_stamp = strtotime($slot->endtime);
$dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
$dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time

$summary = $job->title;

$ical .= "BEGIN:VEVENT
UID:" . $slot->id . "@homewoodphoto.jhu.edu
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:" . $dtstart . "
DTEND:" . $dtend . "
SUMMARY:" . $summary . "
END:VEVENT
";
}

$ical .= "END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;
?>
1
ответ дан 6 December 2019 в 07:51
поделиться

Первоначальное предположение, что ваш массив заполнен неправильно. Итак, чтобы проверить это, я бы начал с удаления

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');

и изменения $ slots = Slot :: find_all (); на

$slots = Slot::find_all();
print_r($slots); 

, чтобы убедиться, что ваш массив объектов установлен.

Затем запустите его из командной строки или браузера, чтобы убедиться, что он выводит, как ожидалось, перед отправкой в ​​Google.

Попробуйте использовать следующий код, чтобы избежать пробелов:

<?php
require_once('../../_includes/initialize.php');

$ical = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//hacksw/handcal//NONSGML v1.0//EN";

$slots = Slot::find_all();
foreach($slots as $slot) {
    $job = Job::find_by_id($slot->job_id);

    $start_stamp = strtotime($slot->start);
    $end_stamp = strtotime($slot->endtime);
    $dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
    $dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time

    $summary = $job->title;

    $ical .= "BEGIN:VEVENT\n";
    $ical .= "UID:" . $slot->id . "@homewoodphoto.jhu.edu\n";
    $ical .= "DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z\n";
    $ical .= "DTSTART:" . $dtstart . "\n";
    $ical .= "DTEND:" . $dtend . "\n";
    $ical .= "SUMMARY:" . $summary . "\n";
    $ical .= "END:VEVENT\n";
}

$ical .= "\nEND:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;

?>
2
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: