Два раза за неделю прошёл до конца Чат GPT, его последнюю версию + предпоследняя версия, которая 1о-мини, уже предупредила, что запросов осталось немного...
Но закончил плагин для сайта, который забирает данные по АПИ у Гугла и показывает их посетителям сайта.
Там конечно не все так просто, как я описал, но в целом кастомизированное модальное окно для вывода доп информации, в том числе и из гугла.
Это просто взрыв мозга, я бы в жизни это не реализовал без посторонней помощи. Но чего греха таить, опыт тоже дает о себе знать, все же код то я читать научился, но кодить даже и не пытался...
Вот прям как батя суп ест, прихлебывает, временами отрывается от ложки, чтобы сказать: "Ух, бля"
Вот примерно так и у меня было во время работы с плагином.
Короче, давно я не погружался в тему сайтостроения так плотно.
Начал с Рунета, и теперь вкатываемся в бурж, причем в несколько локалей!!!
А че бы нет?
Опыт, как говорится, не пропьешь и не такие проекты на 13 языков переводили...
Но закончил плагин для сайта, который забирает данные по АПИ у Гугла и показывает их посетителям сайта.
Там конечно не все так просто, как я описал, но в целом кастомизированное модальное окно для вывода доп информации, в том числе и из гугла.
Это просто взрыв мозга, я бы в жизни это не реализовал без посторонней помощи. Но чего греха таить, опыт тоже дает о себе знать, все же код то я читать научился, но кодить даже и не пытался...
Вот прям как батя суп ест, прихлебывает, временами отрывается от ложки, чтобы сказать: "Ух, бля"
Вот примерно так и у меня было во время работы с плагином.
Короче, давно я не погружался в тему сайтостроения так плотно.
Начал с Рунета, и теперь вкатываемся в бурж, причем в несколько локалей!!!
А че бы нет?
Опыт, как говорится, не пропьешь и не такие проекты на 13 языков переводили...
🔥5🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
А была ли у кого-нибудь вот такая неведомая херня, как у меня на сайте (есть стойкое ощущение, что была)?
Я довольно давно не погружался в классическое малостраничное SEO (сейчас больше по крупным многотысячным проектам, но черт дернул запустить свой небольшой буржуйский сайт. Со всякими приблудами в виде самописных плагинов написанных нейросетью, оптимизацией, добавлением кастомизированной карты на проект и тп штукам, которые радуют глаз старого SEOшника))) Но просчитался, как мне кажется в одном месте (тот самый мем тут не работает, я понимаю что просчитался и даже конкретное место предполагаю, но не уверен на 100% - купил нулевой домен(((
Теперь собственно о проекте, нулевой домен, контент на 7 языках, в индексе из 300 страниц пока что попали 65 страниц, остальные повисли в Обнаружено непроиндексировано. Сайт периодически сканю лягушкой, вылезающие мелкие косяки правлю, так что ошибок в красной зоне там практически нет, контент в целом даже проверял через систему сжатия страницы и большинство страниц в пределах допустимых значений.
То есть:
Сайт молодой (запустился в начале января 2025)
Домен молодой (хотя он с какой то историей, на нем в лохматых годах был какой то лендос, но ничего криминального)
На сайте 7 языков
Сайт регулярно наполняется, обновляется улучшается
Из последнего - прикрутил карту на отдельную страницу, с использованием АПИ leaflet
И в 25 января сделал переезд на новый хостинг (с ру на европейский)
Что насторожило - пару дней назад лягушка обнаружила, что карта сайта (сгенерированная Yoast SEO) закрыта в ноиндекс, проверка через сторонние сервисы не подтвердил это, но лягушка упорно и упорно ставила карте ноиндекс (перебирал плагины, отключал их, проверял на смене темы ничего не решило проблему - упорно в ноиндексе), выключил генерацию карты сайта и подключил через другой плагин - проблема ушла, но вместе с этим косяком в Серч Консоли показы упали почти в ноль...
Индекс еще не обновился, но есть подозрения, что просто страницы повылетали из индекса
Или это сейчас норма? Че там по трендам в последнее время?
Я довольно давно не погружался в классическое малостраничное SEO (сейчас больше по крупным многотысячным проектам, но черт дернул запустить свой небольшой буржуйский сайт. Со всякими приблудами в виде самописных плагинов написанных нейросетью, оптимизацией, добавлением кастомизированной карты на проект и тп штукам, которые радуют глаз старого SEOшника))) Но просчитался, как мне кажется в одном месте (тот самый мем тут не работает, я понимаю что просчитался и даже конкретное место предполагаю, но не уверен на 100% - купил нулевой домен(((
Теперь собственно о проекте, нулевой домен, контент на 7 языках, в индексе из 300 страниц пока что попали 65 страниц, остальные повисли в Обнаружено непроиндексировано. Сайт периодически сканю лягушкой, вылезающие мелкие косяки правлю, так что ошибок в красной зоне там практически нет, контент в целом даже проверял через систему сжатия страницы и большинство страниц в пределах допустимых значений.
То есть:
Сайт молодой (запустился в начале января 2025)
Домен молодой (хотя он с какой то историей, на нем в лохматых годах был какой то лендос, но ничего криминального)
На сайте 7 языков
Сайт регулярно наполняется, обновляется улучшается
Из последнего - прикрутил карту на отдельную страницу, с использованием АПИ leaflet
И в 25 января сделал переезд на новый хостинг (с ру на европейский)
Что насторожило - пару дней назад лягушка обнаружила, что карта сайта (сгенерированная Yoast SEO) закрыта в ноиндекс, проверка через сторонние сервисы не подтвердил это, но лягушка упорно и упорно ставила карте ноиндекс (перебирал плагины, отключал их, проверял на смене темы ничего не решило проблему - упорно в ноиндексе), выключил генерацию карты сайта и подключил через другой плагин - проблема ушла, но вместе с этим косяком в Серч Консоли показы упали почти в ноль...
Индекс еще не обновился, но есть подозрения, что просто страницы повылетали из индекса
Или это сейчас норма? Че там по трендам в последнее время?
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Нейросети не страшны прогрессу, мы сами его остановим (но это не точно)
В общем - возился я давеча с визуализацией в Google Data Studio, нужно было создать агрегированные данные по нескольким источникам, там и формулы и вычисляемые поля, короче все по харду.
Сделал, все собрал, все гуд.
На следующий день идем допиливать и случайно добавляю дополнительное поле в агрегированные данные (дату) и начинается жесточайший секс с Данныим и мозгом, что не так, где ошибка и почему данные такие кривые.
Воевал часов 5 наверное, Чат ГПТ вообще меня уже собрался послать нахрен, я отчаялся и дошел до чата сторонников Google Data Studio, такой телеграмм аналог узкотематичного Stackoverflow.
По поиску нашел пару чатов (русский и англоязычный) и изложил свой вопрос максимально подробно (форумное прошлое и неоднократноые рекомендации от специалистов идти поискать в Гугле то что я воспрошаю дают о себе знать) и отправил в русскоязычный сат.
Ждем
Секунда
Бан, нахер...
Идем к модератору - так мол и так, что нарушил, что не так?
Минут 10 - вас забанили за ваш Ник (у вас там много эмодзи), хорошо что хоть вернули текст, который я составлял. Пробуем еще раз, уже с другого аккаунта, предварительно сообщив об этом модератору...
Секунда - Бан.
Ладно, понимаю что это какая то неведомая херота, иду к англичанам, перевожу на английский, запуливаю.
Надо отдать должное, тут секунд пять сообщение висело, потом снова Бан...
Проблему я в итоге нашел сам, через минут сорок еще, а сегодня мне написал модератор - вас за код в сообщении забанили))) Можете вернуться...
Так и становятся интровертами, нахер не нужна ваша социализация с такими заскоками...
Реально, уже нейросеть оказалась бессильна, идешь к кожаным за советом, и там тебя шлют нахер алгоритмы... Где то не там мы свернули судя по всему.
На Stackoverflow не вернусь, не просите...
В общем - возился я давеча с визуализацией в Google Data Studio, нужно было создать агрегированные данные по нескольким источникам, там и формулы и вычисляемые поля, короче все по харду.
Сделал, все собрал, все гуд.
На следующий день идем допиливать и случайно добавляю дополнительное поле в агрегированные данные (дату) и начинается жесточайший секс с Данныим и мозгом, что не так, где ошибка и почему данные такие кривые.
Воевал часов 5 наверное, Чат ГПТ вообще меня уже собрался послать нахрен, я отчаялся и дошел до чата сторонников Google Data Studio, такой телеграмм аналог узкотематичного Stackoverflow.
По поиску нашел пару чатов (русский и англоязычный) и изложил свой вопрос максимально подробно (форумное прошлое и неоднократноые рекомендации от специалистов идти поискать в Гугле то что я воспрошаю дают о себе знать) и отправил в русскоязычный сат.
Ждем
Секунда
Бан, нахер...
Идем к модератору - так мол и так, что нарушил, что не так?
Минут 10 - вас забанили за ваш Ник (у вас там много эмодзи), хорошо что хоть вернули текст, который я составлял. Пробуем еще раз, уже с другого аккаунта, предварительно сообщив об этом модератору...
Секунда - Бан.
Ладно, понимаю что это какая то неведомая херота, иду к англичанам, перевожу на английский, запуливаю.
Надо отдать должное, тут секунд пять сообщение висело, потом снова Бан...
Проблему я в итоге нашел сам, через минут сорок еще, а сегодня мне написал модератор - вас за код в сообщении забанили))) Можете вернуться...
Так и становятся интровертами, нахер не нужна ваша социализация с такими заскоками...
Реально, уже нейросеть оказалась бессильна, идешь к кожаным за советом, и там тебя шлют нахер алгоритмы... Где то не там мы свернули судя по всему.
На Stackoverflow не вернусь, не просите...
🤣6😢1
This media is not supported in your browser
VIEW IN TELEGRAM
Нашел в интернетах гайд, как настроить у себя на локальном компьютере мощщщщную Нейросеть, чтобы она могла поглощать большие файлы, и не упиралась в лимит строк. Условно, если даешь объемный файл нейросети на анализ в рамках чата, она не сможет обработать больше своего лимита, а вот если настроить через этот гайд - будет есть большие файлы без проблем.
Сразу спойлер - на бесплатной версии это особо не помогло. Я скормил ей файд на 1600 строк, она пыхтела, пыхтела.. Пыхтела пыхтела, несколько раз я писал ей продолжай, она продолжала пыхтеть и в конце концов уперлась в ограничение по бесплатным запросам. Результат не было
GPT о3 с первого раза смог интерпретировать эти 1600 запросов. Дальше думатйте сами, надо оно вам или нет, но вот гайд по установке такого себе на локаль. работает с Claude
1 - Ставим себе декстопную версию Claude
2 - Ставим Питон (если еще не)
3 - Ставим зависимости, я через VSCode ставил, вот команда
4 - Клонируем себе на комп этот репо (Это MCP сервер, на котором и будут обрабатываться большие файлы)
5 - Авторизуемся в Клоде и включаем там режим разработчика (слева вверху меню - Help - Enable Developer Mode)
6 - Открываем настройки (File - Settings - Developer - Edit Config)
7 - Открываем этот файл claude_desktop_config.json блокнотом или любым другим расширением для работы с файлами)
8 - Прописываем в нем такой код:
Вот тут - C:\\Users\\<your-username>\\Documents\\mcp_servers\\mcp-server-data-exploration\\src\\mcp_server_ds
Нужно будет поменять путь к вашему серверу (тот который мы клонировали из Гитхаба. Обратите внимание - концовка там такая же как у меня (mcp-server-data-exploration\\src\\mcp_server_ds ), а вот начало, ваша папка
И еще тонкость - двойные слеши, без них у меня не работает.
После этого сохраняете файл и перезагружаете Клода, долен в диалоговом окне появится молоточек слева внизу, если его нет, попробуйте еще перезагрузить, у меня со второго раза сработало.
С этой надстройкой Клод ест только CSV файлы (xls не взял), чтобы он смог прочитать файл с вашего компа, в диалоговом окне присылаете ему путь до файла (с именем файла и разрешением, пример - C:\\file.csv и запросом, что нужно с файлом сделать.
Разрешаете ему копаться в вашем компе и все.
Пользуйтесь, но есть ощущение что нужен платный Клод...
Вот оригинал статьи, смотреть с ВПН -
Сразу спойлер - на бесплатной версии это особо не помогло. Я скормил ей файд на 1600 строк, она пыхтела, пыхтела.. Пыхтела пыхтела, несколько раз я писал ей продолжай, она продолжала пыхтеть и в конце концов уперлась в ограничение по бесплатным запросам. Результат не было
GPT о3 с первого раза смог интерпретировать эти 1600 запросов. Дальше думатйте сами, надо оно вам или нет, но вот гайд по установке такого себе на локаль. работает с Claude
1 - Ставим себе декстопную версию Claude
2 - Ставим Питон (если еще не)
3 - Ставим зависимости, я через VSCode ставил, вот команда
powershell -ExecutionPolicy Bypass -c "pip install uv"
4 - Клонируем себе на комп этот репо (Это MCP сервер, на котором и будут обрабатываться большие файлы)
5 - Авторизуемся в Клоде и включаем там режим разработчика (слева вверху меню - Help - Enable Developer Mode)
6 - Открываем настройки (File - Settings - Developer - Edit Config)
7 - Открываем этот файл claude_desktop_config.json блокнотом или любым другим расширением для работы с файлами)
8 - Прописываем в нем такой код:
{
"mcpServers": {
"data_explore": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\<your-username>\\Documents\\mcp_servers\\mcp-server-data-exploration\\src\\mcp_server_ds",
"run",
"mcp-server-ds"
]
}
}
}
Вот тут - C:\\Users\\<your-username>\\Documents\\mcp_servers\\mcp-server-data-exploration\\src\\mcp_server_ds
Нужно будет поменять путь к вашему серверу (тот который мы клонировали из Гитхаба. Обратите внимание - концовка там такая же как у меня (mcp-server-data-exploration\\src\\mcp_server_ds ), а вот начало, ваша папка
И еще тонкость - двойные слеши, без них у меня не работает.
После этого сохраняете файл и перезагружаете Клода, долен в диалоговом окне появится молоточек слева внизу, если его нет, попробуйте еще перезагрузить, у меня со второго раза сработало.
С этой надстройкой Клод ест только CSV файлы (xls не взял), чтобы он смог прочитать файл с вашего компа, в диалоговом окне присылаете ему путь до файла (с именем файла и разрешением, пример - C:\\file.csv и запросом, что нужно с файлом сделать.
Разрешаете ему копаться в вашем компе и все.
Пользуйтесь, но есть ощущение что нужен платный Клод...
Вот оригинал статьи, смотреть с ВПН -
claude.ai
Talk with Claude, an AI assistant from Anthropic
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Накипело в очередной раз, с этим Хабром блин...
Почему вот так получается - пишешь статью, ну полная хрень, прям откровенно воняет рекламой, публикуешь скрепя сердцем на Хабре - статья попадает в Топ выдачи, проходит мимо едких и говнокомментаторов и все в целом с ней гуд. Она не портит карму аккаунту, и спокойненько сидит себе в топе.
Но вот ты взял интересную тему, разобрался в вопросе (не глубоко, вероятно, но все же), потратил неделю в общей сложности на сбор информации, осознание ее у себя в голове - написал статью, потратил пару часов на оформление, чтоб было не так сухо читать.
Налетели говнокоммментаторы и убивают карму своими минусами? Думал короче ты Лев Толстой, а на деле... Ну вы поняли.
И нет бы еще че нить дельное писали - а то обзываются, говорят нейротекст и тп.
Короче Хабр - сука, сложная штука, а аудитория там еще сложнее..
Почему вот так получается - пишешь статью, ну полная хрень, прям откровенно воняет рекламой, публикуешь скрепя сердцем на Хабре - статья попадает в Топ выдачи, проходит мимо едких и говнокомментаторов и все в целом с ней гуд. Она не портит карму аккаунту, и спокойненько сидит себе в топе.
Но вот ты взял интересную тему, разобрался в вопросе (не глубоко, вероятно, но все же), потратил неделю в общей сложности на сбор информации, осознание ее у себя в голове - написал статью, потратил пару часов на оформление, чтоб было не так сухо читать.
Налетели говнокоммментаторы и убивают карму своими минусами? Думал короче ты Лев Толстой, а на деле... Ну вы поняли.
И нет бы еще че нить дельное писали - а то обзываются, говорят нейротекст и тп.
Короче Хабр - сука, сложная штука, а аудитория там еще сложнее..
😁3😢1🎉1
This media is not supported in your browser
VIEW IN TELEGRAM
Когда написал статью на Хабре и ждал хороших комментариев, а тебе накидали минусов
😢1
Палю годноту - рабочее решение для сопоставления вашего трафика (показов, кликов, позиций) из Серч консоли с апдейтами Гугла
Не прям автоматизированное решение, где вся инфа подгружается автоматом, понадобится провести настройку, но все работает в итоге, без мам пап и всяких платных посредников.
Настраиваем свой персональный дашбоард у себя на компе, для чего нужно:
1 - Создать проект в Google Cloud Console
Переходим на https://console.cloud.google.com/
Создаем новый проект
Переходим в APIs & Services → Library
Находим и включаем API:
Google Search Console API
2. Создать Service Account
Переходим в IAM & Admin → Service Accounts
Нажимаем Create Service Account и создаем его
Далее создаем и скачаем JSON-файл с ключом (credentials.json)
Сохраняем этот файл – он понадобится в корне проекта (в той же папке, где будет основной скрипт)
Почту из строки client_email необходимо будет добавить в качестве админа в вашей Серч Консоли (для нужного сайта).
Далее в той же папке, где у вас лежит JSON-файл создаем файл с расширением .py, я делаю всегда так - main.py
Не прям автоматизированное решение, где вся инфа подгружается автоматом, понадобится провести настройку, но все работает в итоге, без мам пап и всяких платных посредников.
Настраиваем свой персональный дашбоард у себя на компе, для чего нужно:
1 - Создать проект в Google Cloud Console
Переходим на https://console.cloud.google.com/
Создаем новый проект
Переходим в APIs & Services → Library
Находим и включаем API:
Google Search Console API
2. Создать Service Account
Переходим в IAM & Admin → Service Accounts
Нажимаем Create Service Account и создаем его
Далее создаем и скачаем JSON-файл с ключом (credentials.json)
Сохраняем этот файл – он понадобится в корне проекта (в той же папке, где будет основной скрипт)
Почту из строки client_email необходимо будет добавить в качестве админа в вашей Серч Консоли (для нужного сайта).
Далее в той же папке, где у вас лежит JSON-файл создаем файл с расширением .py, я делаю всегда так - main.py
import os
import json
import pandas as pd
import plotly.graph_objs as go
import dash
from dash import dcc, html
from datetime import datetime
from dash.dependencies import Input, Output
from google.oauth2 import service_account
from googleapiclient.discovery import build
# Ваши константы
SITES = [
"sc-domain:Ваш домен",
"sc-domain:Ваш домен",
]
# Даты, за которые берем данные
START_DATE = "2024-01-01"
END_DATE = "2025-04-12"
# ============================================================
# Обновленный список Google Updates с дополнительными данными
# ============================================================
GOOGLE_UPDATES = [
{"name": "March 2025 core update", "start": "2025-03-13", "end": "2025-03-26"},
{"name": "December 2024 spam update", "start": "2024-12-19", "end": "2024-12-26"},
{"name": "December 2024 core update", "start": "2024-12-12", "end": "2024-12-18"},
{"name": "November 2024 core update", "start": "2024-11-11", "end": "2024-12-04"},
{"name": "Ranking is experiencing an ongoing issue (Aug 2024)", "start": "2024-08-15", "end": "2024-08-19"},
{"name": "August 2024 core update", "start": "2024-08-15", "end": "2024-09-03"},
{"name": "June 2024 spam update", "start": "2024-06-20", "end": "2024-06-27"},
{"name": "March 2024 spam update", "start": "2024-03-05", "end": "2024-03-19"},
{"name": "March 2024 core update", "start": "2024-03-05", "end": "2024-04-19"},
{"name": "November 2023 reviews update", "start": "2023-11-08", "end": "2023-12-07"},
{"name": "November 2023 core update", "start": "2023-11-02", "end": "2023-11-27"},
{"name": "October 2023 core update", "start": "2023-10-05", "end": "2023-10-18"},
{"name": "Ranking is experiencing an ongoing issue (Oct 2023)", "start": "2023-10-05", "end": "2023-10-31"},
{"name": "October 2023 spam update", "start": "2023-10-04", "end": "2023-10-19"},
{"name": "September 2023 helpful content update", "start": "2023-09-14", "end": "2023-09-27"},
{"name": "August 2023 core update", "start": "2023-08-22", "end": "2023-09-07"},
{"name": "April 2023 reviews update", "start": "2023-04-12", "end": "2023-04-25"},
{"name": "March 2023 core update", "start": "2023-03-15", "end": "2023-03-28"},
{"name": "February 2023 product reviews update", "start": "2023-02-21", "end": "2023-03-07"},
]
# События на сайте
EVENTS = [
{"name": "Ваше событие", "date": "2024-02-12"},
{"name": "Ваше событие", "date": "2024-02-16"},
{"name": "Ваше событие", "date": "2024-02-27"},
{"name": "Ваше событие", "date": "2024-03-20"},
{"name": "Ваше событие", "date": "2024-03-21"},
]
def fetch_gsc_data(property_uri, start_date, end_date, creds):
service = build('searchconsole', 'v1', credentials=creds)
body = {
'startDate': start_date,
'endDate': end_date,
'dimensions': ['date'],
'rowLimit': 10000
}
response = service.searchanalytics().query(siteUrl=property_uri, body=body).execute()
rows = response.get('rows', [])
data = []
for r in rows:
d = r['keys'][0]
data.append({
'date': d,
'clicks': r.get('clicks', 0),
'impressions': r.get('impressions', 0),
'position': r.get('position', 0)
})
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
return df
def load_all_data(
start_date=START_DATE,
end_date=END_DATE,
sites=SITES,
creds_file="Название вашего JSON-файла"
):
creds = service_account.Credentials.from_service_account_file(
creds_file,
scopes=["https://www.googleapis.com/auth/webmasters.readonly"]
)
all_df = []
for s in sites:
df_s = fetch_gsc_data(s, start_date, end_date, creds)
df_s['domain'] = s
all_df.append(df_s)
big_df = pd.concat(all_df, ignore_index=True)
return big_df
app = dash.Dash(__name__)
GLOBAL_DF = None # кешируем загруженные данные
app.layout = html.Div([
html.H1("GSC Дашборд - Клики, Показы, Позиция"),
html.Div([
html.Label("Выберите сайт(-ы):"),
dcc.Checklist(
id='site-selector',
options=[{'label': site, 'value': site} for site in SITES],
value=SITES,
inline=True
),
]),
html.Div([
html.Label("Метрики:"),
dcc.Checklist(
id='metric-selector',
options=[
{'label': 'Клики', 'value': 'clicks'},
{'label': 'Показы', 'value': 'impressions'},
{'label': 'Позиция', 'value': 'position'},
],
# Если тут пусто, у нас нет рядов данных => ось X может стать [0..1]
value=[],
inline=True
),
]),
html.Div([
html.Label("Показать Google Updates:"),
dcc.Checklist(
id='updates-toggle',
options=[{'label': u['name'], 'value': u['name']} for u in GOOGLE_UPDATES],
value=[],
inline=True
),
]),
html.Div([
html.Label("Показать события:"),
dcc.Checklist(
id='events-toggle',
options=[{'label': e['name'], 'value': e['name']} for e in EVENTS],
value=[],
inline=True
),
]),
dcc.Graph(id='gsc-graph')
])
@app.callback(
Output('gsc-graph', 'figure'),
[
Input('site-selector', 'value'),
Input('metric-selector', 'value'),
Input('updates-toggle', 'value'),
Input('events-toggle', 'value'),
Input('gsc-graph', 'relayoutData')
]
)
def update_graph(selected_sites, selected_metrics, selected_updates, selected_events, relayoutData):
global GLOBAL_DF
if GLOBAL_DF is None:
GLOBAL_DF = load_all_data()
print("=== CALLBACK ===")
print("Selected events: ", selected_events) # Проверяем в консоли, что выбрано
fig = go.Figure()
# Фильтруем общий DF по выбранным доменам
filtered_df = GLOBAL_DF[GLOBAL_DF['domain'].isin(selected_sites)]
# Если выбраны метрики, строим линии
if selected_metrics:
for site in selected_sites:
df_site = filtered_df[filtered_df['domain'] == site].sort_values('date')
for metric in selected_metrics:
fig.add_trace(go.Scatter(
x=df_site['date'],
y=df_site[metric],
mode='lines',
name=f"{site} - {metric}"
))
# Добавляем прямоугольники (vrect) для Google Updates
for upd in GOOGLE_UPDATES:
if upd['name'] in selected_updates:
fig.add_vrect(
x0=upd['start'], x1=upd['end'],
fillcolor='red', opacity=0.1, layer='below', line_width=0,
annotation_text=upd['name'],
annotation_position="top left"
)
# Добавляем события (вертикальные линии) для выбранных ev
for ev in EVENTS:
if ev['name'] in selected_events:
date_str = pd.to_datetime(ev['date']).strftime('%Y-%m-%d')
print(f"Adding event line: {ev['name']} at {date_str}") # Диагностика
fig.add_vline(
x=date_str,
line_color='blue',
opacity=1.0,
line_width=2,
layer='above'
)
fig.add_annotation(
x=date_str,
y=1,
xref='x',
yref='paper',
text=ev['name'],
showarrow=True,
arrowhead=2,
ax=0,
ay=-40,
font=dict(color='blue', size=12)
)
# Настройка осей
fig.update_layout(
title="GSC Трафик",
xaxis_title="Дата",
yaxis_title="Значение",
legend_title="Сайты и метрики",
xaxis=dict(
tickmode='linear',
tick0=pd.to_datetime(START_DATE),
dtick=86400000.0, # один день (в мс)
tickformat="%d-%m-%Y",
rangeslider=dict(visible=True),
)
)
# Если метрик нет => вручную задаём X-ось (иначе range может оказаться [0..1])
if not selected_metrics:
print("No metrics selected -> Forcing x-range to START..END")
fig.update_xaxes(range=[START_DATE, END_DATE])
# Обработка зума (для Y-оси)
if relayoutData:
if "xaxis.range[0]" in relayoutData and "xaxis.range[1]" in relayoutData and selected_metrics:
x_start = pd.to_datetime(relayoutData["xaxis.range[0]"])
x_end = pd.to_datetime(relayoutData["xaxis.range[1]"])
mask = (filtered_df['date'] >= x_start) & (filtered_df['date'] <= x_end)
zoomed_df = filtered_df[mask]
if not zoomed_df.empty:
y_min = zoomed_df[selected_metrics].min().min()
y_max = zoomed_df[selected_metrics].max().max()
y_padding = (y_max - y_min) * 0.05
fig.update_yaxes(range=[y_min - y_padding, y_max + y_padding])
# Чтобы при переключении чекбоксов не сбрасывался зум или аннотации
fig.update_layout(uirevision='fixed')
return fig
if __name__ == '__main__':
app.run(debug=True)
В данном коде необходимо изменить следующее:
Строка 14 - вписать ваши домены, которые нужно вывести на графике
Строка 19 - указываем период, за который нужны данные (если проектов много, рекомендую не брать слишком большой период - будет долго подгружать)
Строка - 25-46 - тут я вписал апы Гугла - вы можете добавить если что то не указано
Строка 48 - тут вписываете события, которые хотите видеть на графике (они будут показаны вертикальной линией, как на скрине выше)
Строка 84 - название вашего JSON - файла (который расположен в той же папке, что и сам скрипт)
Все - вы почти готовы начинать...
Устанавливаем зависимости этой командой
pip install dash plotly pandas google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
И запускаем скрипт
python main.py
Когда скрипт запустится вы увидите в терминале, что дашборд доступен по локальному адресу, в моем случае это - http://127.0.0.1:8050 - переходим по этому адресу и работаем с дашбордом
Ну и да, новые апы нужно будет добавлять руками уже самостоятельно, а как вы хотели, некоммерческие проекты они такие🤷
👍4
В комментах под предыдущим постом скинули мне это расширение - https://chromewebstore.google.com/detail/gsc-guardian/aomiehgfjgolamlllgbkjbnfmdmffcch
Оно накладывает апы гугла на график в серч консоли, то есть если просто надо посмотреть как себя вёл сайт (один сайт) после и во время апа - нормальный вариант.
Но если у вас несколько проектов и надо их сравнивать друг с другом, я все же буду использовать скрипт, который описал выше.
Он выводит на один график все проекты, которые туда добавить, но за расширение спасибо, я не знал о нем
Оно накладывает апы гугла на график в серч консоли, то есть если просто надо посмотреть как себя вёл сайт (один сайт) после и во время апа - нормальный вариант.
Но если у вас несколько проектов и надо их сравнивать друг с другом, я все же буду использовать скрипт, который описал выше.
Он выводит на один график все проекты, которые туда добавить, но за расширение спасибо, я не знал о нем
Google
GSC Guardian - Chrome Web Store
Stay on top of your website's health. Check for incidents in your Google Search Console data with a simple graph.
Давно я ничего не писал, думаю пора обновить ленту.
Я долгое время писал статьи на свой аккаунт Хабр, у меня свои заказчики, для кого я пишу тексты технической и полутехнической направленности, плюс по работе я часто сталкиваюсь с техническими копирайтерами и я знаю, что текст про технологии (что то с кодом, что то про автоматизацию и т.д.) не стоит дешево, авторам неинтересно писать дешево в этой тематике, так как они лучше потратят это время на что-то, что принесет им больше денег.
И вот мне интересно почему Хабр, который позиционирует себя как супер крутой продукт так неуважительно относится к своим авторам, авторы, которые пишут ему технические тексты получают от 5 до 15к за проект (а проект это не одна статья может быть). Фактически Хабр берет с рекламодателя минимум 175к за три месяца за корпоративный блог (это самый минимальный тариф, на максимуме там 360к за 3 месяца просто за возможность писать статьи от лица компании), но своим авторам он готов платить не больше 15к😐😐😐 Я не говорю еще про какой-то кодекс, которого придерживаются сотрудники Хабра))
Кто эти технари, которые пишут им технические тексты за 15к (это кстати, верхняя планка, минимум 5к, и что то мне подсказывает платить стараются именно минимум)? Вы бы подвязались под такой проект за 5-15к?
Я когда дошел до второго вопроса, где и указана цена, сразу закрыл анкету.
Там же еще такой спрос бешеный, что они прям в анкете пишут - может быть, когда нибудь мы с вами свяжемся)))
Хабр это не про заработок - это про команду мечты, вероятно))
Я долгое время писал статьи на свой аккаунт Хабр, у меня свои заказчики, для кого я пишу тексты технической и полутехнической направленности, плюс по работе я часто сталкиваюсь с техническими копирайтерами и я знаю, что текст про технологии (что то с кодом, что то про автоматизацию и т.д.) не стоит дешево, авторам неинтересно писать дешево в этой тематике, так как они лучше потратят это время на что-то, что принесет им больше денег.
И вот мне интересно почему Хабр, который позиционирует себя как супер крутой продукт так неуважительно относится к своим авторам, авторы, которые пишут ему технические тексты получают от 5 до 15к за проект (а проект это не одна статья может быть). Фактически Хабр берет с рекламодателя минимум 175к за три месяца за корпоративный блог (это самый минимальный тариф, на максимуме там 360к за 3 месяца просто за возможность писать статьи от лица компании), но своим авторам он готов платить не больше 15к😐😐😐 Я не говорю еще про какой-то кодекс, которого придерживаются сотрудники Хабра))
Кто эти технари, которые пишут им технические тексты за 15к (это кстати, верхняя планка, минимум 5к, и что то мне подсказывает платить стараются именно минимум)? Вы бы подвязались под такой проект за 5-15к?
Я когда дошел до второго вопроса, где и указана цена, сразу закрыл анкету.
Там же еще такой спрос бешеный, что они прям в анкете пишут - может быть, когда нибудь мы с вами свяжемся)))
Хабр это не про заработок - это про команду мечты, вероятно))
💯1🤝1