Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Переводим час:мин:сек в секунды и в iso 8601 формат времени для микроразметки фильмов

Тема в разделе "Хаки DLE", создана пользователем DLEPlugins, 8 сен 2016.

08.09.16 в 16:49
22.09.18 в 02:06
12
1.045
2
  1. TopicStarter Overlay
    DLEPlugins

    Команда форума Модератор Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.616
    Лучших ответов:
    6
    Рейтинги:
    +1.160 / 6 / -12
    Столкнулся с вопросом: парсер заполняет в доп поле длительности время в формате Час:Мин:Сек, т.е. 01:55:16. Для разметки длительности Яша (Яндекс) просит давать ему длительность в секундах, Гоша (Гугл) просит же в формате времени ISO 8601, т.е. PT1H55M16S. Предлагаю дать им то, чего они хотят :D
    Я сделал при помощи php. Открываем /engine/modules/show.full.php и ищем строчку
    PHP:
    $xfieldsdata xfieldsdataload$row['xfields'] );
    ниже вставляем
    PHP:
    $time explode(":"$xfieldsdata['имя_доп_поля_с_длительностью']);
            
    $seconds $time[0]*3600 $time[1]*60 $time[2];
            
    $seotime 'PT'.$time[0].'H'.$time[1].'M'.$time[2].'S';
            
    $tpl->set'{seotime}'$seotime );
    Теперь если вы поставили разметку по этой инструкции
    PHP:
    $social_tags['video:duration'] = $xfieldsdata['time_sec'];
    замените на
    PHP:
    $social_tags['video:duration'] = $seconds;
    Длительность для гугла же можно выводить новосозданным тегом {seotime}, т.е. в этой инструкции
    PHP:
    <meta itemprop="duration" content="[xfvalue_duration]">
    замените на
    PHP:
    <meta itemprop="duration" content="{seotime}">
    .

    Если в своем show.full.php вы не нашли строчки (не ставили разметку по моему примеру)
    PHP:
    $xfieldsdata xfieldsdataload$row['xfields'] );
    значит находим там
    PHP:
    if ($row['metatitle']) $metatags['header_title'] = $row['metatitle'];
    ниже вставляем
    PHP:
    $xfieldsdata xfieldsdataload$row['xfields'] );
            
    $time explode(":"$xfieldsdata['имя_доп_поля_с_длительностью']);
            
    $seconds $time[0]*3600 $time[1]*60 $time[2];
            
    $seotime 'PT'.$time[0].'H'.$time[1].'M'.$time[2].'S';
            
    $tpl->set'{seotime}'$seotime );
    Если вдруг вам помимо тега {seotime} для Гоши нужен тег для вывода длительности в секундах на сайте для Яши, то ниже
    PHP:
    $tpl->set'{seotime}'$seotime );
    вставляем
    PHP:
    $tpl->set'{seconds}'$seconds);
    теперь будет доступен тег {seconds}.
    Надеюсь кому-то пригодится так же как и мне
     
    • Нравится Нравится x 2
  2. MaHarder

    MaHarder Местный

    Регистрация:
    9 июн 2015
    Сообщения:
    1.074
    Лучших ответов:
    0
    Рейтинги:
    +356 / 0 / -1
    я тебе больше скажу, что гоше, что яше, нравятся и такие вот значения
     

    Вложения:

  3. TopicStarter Overlay
    DLEPlugins

    Команда форума Модератор Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.616
    Лучших ответов:
    6
    Рейтинги:
    +1.160 / 6 / -12
    да, но для разметки видеоролика, которую я использую так не годится + почитай их рекомендации относительно разметки
     
  4. MaHarder

    MaHarder Местный

    Регистрация:
    9 июн 2015
    Сообщения:
    1.074
    Лучших ответов:
    0
    Рейтинги:
    +356 / 0 / -1
    в том то и малина... раньше они ругались, что не по стандарту - теперь всё в порядке.
     
  5. TopicStarter Overlay
    DLEPlugins

    Команда форума Модератор Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.616
    Лучших ответов:
    6
    Рейтинги:
    +1.160 / 6 / -12
    Допустим проиндексирован видеоролик и показывается в поисковике в видео, рядом с ютубом. Блок с картинкой-кадром, внизу справа отображается время
    https://yandex.ua/video/touch/search?text=маша и медведь&path=main
    Хочешь сказать вместо 06:53 будет писаться 6 минут 53 секунды? Думаю врядли. Посмотри на Ютуб, рутуб и прочих гигантов, как у них в разметке длительность пишется
     
  6. MaHarder

    MaHarder Местный

    Регистрация:
    9 июн 2015
    Сообщения:
    1.074
    Лучших ответов:
    0
    Рейтинги:
    +356 / 0 / -1
    @DomiTori, а толку? Наши сайты туда не попадут. И я не спорю с тобой, а лишь говорю, что поисковики начали такое понимать
     
  7. byroot

    Команда форума Администратор VIP Кинотрафик v2

    Регистрация:
    10 окт 2015
    Сообщения:
    9.889
    Лучших ответов:
    29
    Рейтинги:
    +4.021 / 19 / -26
    2016-09-09_17-44-47.png
    2016-09-09_17-45-18.png
    выведено по ISO 8601 в минутах, т.е. PT91M и в секундах для OG - всё нормально.
    для гугла можно так же и в секундах передавать просто как PT1600S и он сам пересчитает их в часы/минуты/секунды...
    PS что то гугль не хочет переиндексацию сайта мне делать быстро, в поиске по видео кривые снипеты мне наделал :eek:
     
    • Нравится Нравится x 1
  8. TopicStarter Overlay
    DLEPlugins

    Команда форума Модератор Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.616
    Лучших ответов:
    6
    Рейтинги:
    +1.160 / 6 / -12
    Коммент выше... У меня гугл и бинг видео разметку кушают без проблем. С яшей драться приходится. В итоге и он сдается.
     
  9. tyz75

    tyz75 Новичок

    Регистрация:
    5 авг 2017
    Сообщения:
    26
    Лучших ответов:
    0
    Рейтинги:
    +1 / 2 / -0
    У меня формат такой " 156 мин. " Подскажите какой нужно код?
     
  10. tyz75

    tyz75 Новичок

    Регистрация:
    5 авг 2017
    Сообщения:
    26
    Лучших ответов:
    0
    Рейтинги:
    +1 / 2 / -0
    Хак Выводит дополнительное полес секундами , а другое дополнительное поле время в формате например "1 час 56 минут" Я новичок ещё в PHP, можно было бы Наверное немного покрасивее. В общем если есть вопросы пишите

    PHP:
    $xfieldsdata xfieldsdataload($row['xfields']);
    list(
    $y$e) = explode(" "$xfieldsdata['имя_доп_поля_с_длительностью']);
    $seconds = ($y 60);
    $minytes = ($y 60) * 1;
    $chas floor($y 60);

    if (
    preg_match("/1|[2-5]\1/"$minytes)) $minytes_i 'минута';
    elseif (
    preg_match("/[2-4]|[2-5]\1/"$minytes)) $minytes_i 'минуты';
    else 
    $minytes_i 'минут';

    if (
    $minytes && $chas == 1) {
        
    $ch_i 'час';
        
    $mod_i $chas $ch_i " $minytes $minytes_i";
    }
    elseif (
    preg_match("/[2-4]/"$chas) && $minytes 0) {
        
    $ch_i "часа";
        
    $mod_i $chas $ch_i " $minytes $minytes_i";
    }
    elseif (
    preg_match("/[2-4]/"$chas) && $minytes == 0$mod_i $chas " часа";
    elseif (
    $chas == && $minytes == 0$mod_i $chas " час";
    elseif (
    $chas >= && $minytes == 0$mod_i $chas " часов";
    elseif (
    $chas 1$mod_i $minytes $minytes_i";
    else 
    $mod_i $y $minytes_i";

    $seotime 'PT' $chas 'H' $minytes 'M0S';
    $tpl->set('{seotime}'$seotime);
    $tpl->set('{mod_i}'$mod_i);

     
    #10 tyz75, 28 июл 2018
    Последнее редактирование: 22 сен 2018 в 12:08
  11. sneiks

    Команда форума VIP Кинотрафик v2

    Регистрация:
    27 янв 2016
    Сообщения:
    252
    Лучших ответов:
    0
    Рейтинги:
    +36 / 0 / -1
    Скажите как поправить если у меня в доп. поле время проставлено так: 1 час 35 минут

    Интересует только для разметки property="video:duration"... готов кинуть на пиво ;)
     
  12. tyz75

    tyz75 Новичок

    Регистрация:
    5 авг 2017
    Сообщения:
    26
    Лучших ответов:
    0
    Рейтинги:
    +1 / 2 / -0


    А какой это парсер так проставляет время? Или это хак?
     
  13. tyz75

    tyz75 Новичок

    Регистрация:
    5 авг 2017
    Сообщения:
    26
    Лучших ответов:
    0
    Рейтинги:
    +1 / 2 / -0
    PHP:
    $time_m explode(" "$xfieldsdata['имя_доп_поля_с_длительностью']);
    if (
    preg_match('/^[0-9\s](.+)[0-6][0-9\s](.+)$/ui'$xfieldsdata['имя_доп_поля_с_длительностью'])) {
        
    $seotime $time_m[0]*3600 $time_m[2]*60;
        }
        elseif (
    preg_match('/^[0-6][0-9\s](.+)$/ui'$xfieldsdata['имя_доп_поля_с_длительностью'])) {
            
    $seotime $time_m[0]*60;
        }
        else 
    $seotime "~";
    $tpl->set'{seotime}'$seotime );

     
    #13 tyz75, 22 сен 2018 в 02:06
    Последнее редактирование: 22 сен 2018 в 02:23
Яндекс.Метрика