• Google api где взять token.json и credentials.json?

    @apu3
    Ноябрь 2021

    Как я это делал при помощи Golang и quickstart от Google (ссылка на этот quickstart - https://developers.google.com/sheets/api/quickstart/go).

    Это не относится в случае других языков, но, вероятно, всё работает так, что вам нужен client_secret.json (вроде как, это то же самое, что credentials.json, но не уверен на все 100%), а token.json по идее так или иначе генерируется из client_secret.json.
    client_secret.json можно получить при помощи https://console.cloud.google.com/apis/credentials . (нажать кнопку "CREATE CREDENTIALS" -> "OAuth client ID" -> "выбрать тип приложения и название токена" -> "Нажать на кнопку Скачать")

    Пишу этот ответ, чтобы у людей была хоть какая-то дополнительная возможность понять, что и как можно сделать, а не "делайте так же, даже если вы программируете на C++/C#/Python/и так далее"

    1. Зайти на https://console.cloud.google.com/apis/credentials
    2. Нажать "CREATE CREDENTIALS"
    3. Выбрать "OAuth client ID"
    4. Выбрать необходимую опцию в "Application type" и так далее. Не знаю, какое именно значение это имеет.
    5. Скачать файл client_secret.json (тот же credentials.json, насколько я понимаю)
    6. Добавить client_secret.json в go QuickStart
    7. Запустить QuickStart. Запущенная программа в консоли попросит перейти по ссылке (ссылку программа даст там же, в консоли) и вставить в консоль код (код увидите, когда перейдёте по ссылке)
    8. Программа сгенерирует token.json
    Ответ написан
    Комментировать
  • Особенность или уязвимость DNS-серверов reg.ru?

    Hostinguru
    @Hostinguru
    Системный администратор linux
    Приветствую. Это особенность работы.

    Такой же фокус можно провернуть, например если Вы укажите dns Яндекса, но не добавите его в вебмастер. Любой другой человек сможет добавить его к себе и таким образом подтвердить.

    Ровно такая же ситуация с dns происходит и у beget/fozzy/firstvps/,и т д. Выводы делайте сами.

    Избежать такой ситуации можно если использовать днс сервера регистратора. Так как у него есть 100% связка домен -владелец никто другой его себе не добавит и управление не получит.

    Ну и быть внимательнее к днс серверам при заказе. Не стоит направлять домен на днс которыми вы не управляете
    Ответ написан
    2 комментария
  • Особенность или уязвимость DNS-серверов reg.ru?

    @webfellix
    По поводу очищения домена из базы, это абсолютно на проблема, занимает обычно от 2 дней до недели.
    1) Прикрепляете к домену свой чистый сайт,
    2) добавляете в гугл консоль и яндекс вебмастер, в обоих системах есть проверка сайта на вирусы. Подаете заявки на проверку сайта.
    3) ESET. Информация есть на этой странице. Им нужно отписаться на их email (желательно на английском), о том что сайт false positive.
    4) Sophos AV. Заходите на эту страницу , выбираете "Web Address" и заполняете форму, в комментарии пишете также что "false positive url"

    ps. Если добавится другой антивирус то ищем сайт антивируса и формы обратной связи или почты поддержки и отписываемся туда с пометкой "False Positive Submission". Обычно компании отвечают 1-3 суток и убирают сайт.

    ps2. По своему опыту скажу что на историю домена не повлияет, не один десяток сайтов чистил от вирусов, закрывал дыры. Потом отписывался компаниям антивирусов и сайт возвращался в поисковик и обратно в топы поиска (конечно если он там был до этого=) )
    Ответ написан
    1 комментарий
  • Как игнорировать первые символы строки в RegExp?

    0xD34F
    @0xD34F Куратор тега JavaScript
    str.replace(/(?<=.{2}).(?=.{2})/g, '*')
    
    // или
    
    str.replace(/^(.{2})(.+)(.{2})$/, (m, g1, g2, g3) => g1 + '*'.repeat(g2.length) + g3)
    
    // или
    
    Array.from(str, (n, i) => (i < 2 || i > str.length - 3) ? n : '*').join('')
    Ответ написан
    1 комментарий
  • Как отменить git reset --hard ???

    @Chalovik Автор вопроса
    Вроде бы нашел решение, помогла команда git reset --hard HEAD@{1}
    Ответ написан
    3 комментария
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев
  • Как напечатать table на нескольких листах?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Для современных браузеров должно работать предложенное @EnterSandman
    tr{page-break-inside: avoid;}

    Увы, для webkit конкретно для display:table-xxx не работает. Работает для display:block, но ставить это для всех tr — чистой воды самоубийство.

    Только JS-решения — определять высоту кусков таблицы и... Например, втыкать в месте разрыва tr (здесь с классом devide)
    .devide{
    	display:none;
    	page-break-after:always;
    }
    .devide td{
    	display:none;
    }
    @media print{
    	.devide{
    		display:block;
    	}
    }


    Кстати, и thead, и tfoot при печати на каждом листе webkit также не выведет.
    Ответ написан
    5 комментариев
  • Как перевести из секунд в часы и минуты?

    Shutik
    @Shutik
    Погромист халявщик
    $sec = 90000;
    echo sprintf('%02d:%02d', ($sec / 3600), ($sec / 60 % 60));
    //25:00
    Ответ написан
    Комментировать
  • Как опубликовать сообщение в группе с помощью API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Чтобы отправить сообщение в живую ленту нужно еще более изощренный метод.

    Подключаем модуль Соц.сети:
    CModule::IncludeModule("socialnetwork");

    Чтобы отправить сообщение в ленту, нужно чтобы существовал пост, который будет отправлен в ленту, поэтому создаем сначала пост:

    $arFields = array(
     "TITLE" => "Заголовок записи",
     "DETAIL_TEXT" => "Тело сообщения",
     "BLOG_ID" => 1, //ID отправителя
     "AUTHOR_ID" => 1, //ID блога, в котором будет запись
     "DATE_PUBLISH" => '11.02.2014 09:08', // дада
     "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH, // Читаем в API
     "ENABLE_TRACKBACK" => 'N',
     "ENABLE_COMMENTS" => 'Y'
    );


    При успешном добавлении ($ID = CBlogPost::Add($arFields);) получим ID blogPost записи

    Затем необходимо отправить это сообщение в ленту, для нам нужен фрагмент кода (заменить соответствующим образом):

    $arEvent = array (
    	'EVENT_ID'     => 'blog_post',
    	'=LOG_DATE'    => 'now()',
    	'TITLE_TEMPLATE' => '#USER_NAME# добавил(а) сообщение "#TITLE#" в блог',
    	'TITLE'    => "Заголовок записи",
    	'MESSAGE'  => "Текст записи",
    	'TEXT_MESSAGE'  => "Текст записи",
    	'MODULE_ID'     => 'blog',
    	'CALLBACK_FUNC' => false,
    	'SOURCE_ID'     => $ID,
    	'ENABLE_COMMENTS'  => 'Y',
    	'RATING_TYPE_ID'   => 'BLOG_POST',
    	'RATING_ENTITY_ID' => $newID,
    	'ENTITY_TYPE' => 'U',
    	'ENTITY_ID'   => '1',
    	'USER_ID'     => '1',
    	'URL' => '/company/personal/user/1/blog/'.$ID.'/',
    );


    Создаём запись в ленте через: CSocNetLog::Add, на выходе получаем eventID (в случае успеха)

    Если все прошло хорошо, то выставляем права на пост (в премере отправляем ВСЕМ ПОЛЬЗОВАТЕЛЯМ G3)

    // Выдает права
    CSocNetLogRights::Add ( $eventID, array ("G3") );
    // Отправляет уведомление о новом сообщении
    CSocNetLog::SendEvent ( $eventID, 'SONET_NEW_EVENT' );


    Радуемся =)

    Все параметры получаются по средствам GetList например.
    Ответ написан
    4 комментария
  • Как удалить все значения множественного свойства?

    Diversia
    @Diversia Автор вопроса
    Правильнее оказалось так:
    $arFile["MODULE_ID"] = "iblock";
    $arFile["del"] = "Y";
    $PROP['morePhotos'][id варианта] = $arFile;
    Ответ написан
    Комментировать
  • Как не коммитить изменения прав на файлы?

    denver
    @denver
    git config core.filemode false
    Ответ написан
    Комментировать