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

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

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

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

08.09.16 в 16:49
07.01.24 в 21:13
42
6.682
2
  1. TopicStarter Overlay
    DLEPlugins

    Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.608
    Лучших ответов:
    8
    Рейтинги:
    +1.194 / 9 / -0
    Столкнулся с вопросом: парсер заполняет в доп поле длительности время в формате Час:Мин:Сек, т.е. 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.054
    Лучших ответов:
    0
    Рейтинги:
    +333 / 0 / -0
    я тебе больше скажу, что гоше, что яше, нравятся и такие вот значения
     

    Вложения:

  3. TopicStarter Overlay
    DLEPlugins

    Кодер

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

    MaHarder Местный

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

    Кодер

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

    MaHarder Местный

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

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.204 / 74 / -0
    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.608
    Лучших ответов:
    8
    Рейтинги:
    +1.194 / 9 / -0
    Коммент выше... У меня гугл и бинг видео разметку кушают без проблем. С яшей драться приходится. В итоге и он сдается.
     
  9. tyz75

    tyz75 Посетитель

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

    tyz75 Посетитель

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

    PHP:
    $xfieldsdata xfieldsdataload$row['xfields'] );
    list(
    $y$e) = explode(" "$xfieldsdata['имя_доп_поля_с_длительностью']);
    $seconds = ($y*60);
    $minytes=($y%60)*1;
    $chas floor($y/60);
    if (
    $minytes == || $minytes == 21 || $minytes == 31 || $minytes == 41 || $minytes == 51) {
        
    $minytes_i 'минута';
    } elseif (
    $minytes == || $minytes == || $minytes == || $minytes == 22 || $minytes == 23 || $minytes == 24 || $minytes == 32 || $minytes == 33 || $minytes == 34 || $minytes == 42 || $minytes == 43 || $minytes == 44 || $minytes == 52 || $minytes == 53 || $minytes == 54) {
        
    $minytes_i 'минуты';

    } else {
        
    $minytes_i 'минут';

    }

    if (
    $minytes && $chas == 1) {
        
    $ch_i  'час';
        
    $mod_i $chas $ch_i " $minytes $minytes_i";

    } elseif ( 
    $minytes && $chas == || $chas == || $chas == ) {
        
    $ch_i  'часа';
        
    $mod_i $chas $ch_i " $minytes $minytes_i";

    } elseif (
    $minytes == && $chas == || $minytes == && $chas == || $minytes == && $chas == 4) {

        
    $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
    Последнее редактирование: 8 сен 2019
  11. sneiks

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

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

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

    tyz75 Посетитель

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


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

    tyz75 Посетитель

    Регистрация:
    5 авг 2017
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +1 / 4 / -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
    Последнее редактирование: 22 сен 2018
  14. foxrus

    foxrus Посетитель

    Регистрация:
    12 апр 2017
    Сообщения:
    57
    Лучших ответов:
    0
    Рейтинги:
    +6 / 0 / -0
    Привет всем! Так и не понял что google хочет
    duration - 468000 (Значение 468000 указано в неправильном формате.
    Пробовал способ немного выше и последний, но в обеих случаях пишет одинаковое.
    Может кто подскажет в чем проблема?
     
  15. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.204 / 74 / -0
    как вариант - PT468000S можно попробовать указать. раньше чисто цифр хватало, сейчас нужно указывать уже PT*S.
     
  16. foxrus

    foxrus Посетитель

    Регистрация:
    12 апр 2017
    Сообщения:
    57
    Лучших ответов:
    0
    Рейтинги:
    +6 / 0 / -0
    Я пробовал и этим методом

    $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 );

    Но, так тоже говорит что неправильный формат
     
  17. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.204 / 74 / -0
    foxrus чтобы увидеть проблему - её нужно увидеть, не видя кода - трудно сказать что-либо почему может быть ошибка валидатора микроразметки.
     
  18. foxrus

    foxrus Посетитель

    Регистрация:
    12 апр 2017
    Сообщения:
    57
    Лучших ответов:
    0
    Рейтинги:
    +6 / 0 / -0
    Что мне нужно дописать чтобы превратить это в число

    duration PT43 мин.HMS (Значение PT43 мин.HMS указано в неправильном формате
     
  19. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.204 / 74 / -0
    для 43 минут должно быть либо PT0H43M0S либо PT43M либо PT2580S. Я обычно указываю в секундах, так проще и короче получается и гугл норм его понимает!
     
  20. foxrus

    foxrus Посетитель

    Регистрация:
    12 апр 2017
    Сообщения:
    57
    Лучших ответов:
    0
    Рейтинги:
    +6 / 0 / -0
    Спасибо за ответ, это я уже понял, но как убрать слово "мин" после цифры?
     
Похожие темы
  1. vasili
    Ответов:
    13
    Просмотров:
    2.048
  2. Winston?!
    Ответов:
    11
    Просмотров:
    943
  3. soccerforecast
    Ответов:
    12
    Просмотров:
    1.222
  4. Roman.U
    Ответов:
    11
    Просмотров:
    520
Загрузка...
Яндекс.Метрика