Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Импорт публичных постов из основного клуба в dev/local среду #1212

Merged
merged 3 commits into from
Jun 20, 2024

Conversation

trin4ik
Copy link
Contributor

@trin4ik trin4ik commented Jun 19, 2024

Хочу подбить поиск, мантикора смотрится вполне интересным вариантом. Для тестов столкнулся с тем. что не плохо бы иметь на локалке "живые" посты.

Накидал команду, которая парсит https://vas3k.club/feed.json, собирает там публичные посты (чтобы был полный текст, а не обрывки) и вставляет всё это добро в локальную базу.

$ python3 manage.py import_posts_to_dev [--pages PAGES] [--skip SKIP] [--force] 

Импорт постов с оригинального vas3k.club на dev/local сборки

optional arguments:
  --pages PAGES         Количество страниц, забираемых и фида
  --skip SKIP           Количество страниц, которые надо пропустить
  --force               Заменять посты, если они уже существуют
$ python3 manage.py import_posts_to_dev --force             
📁 https://vas3k.club/feed.json?page=1
 📄 "Гайд: свадьба в Дании или легкий способ пожениться в Европе" запись создана
 📄 "Кто носит элайнеры? 😬" запись создана
 📄 "Моя кошечка соскуфилась" запись создана
 📄 "Какой бы вы дали совет себе 20-летнему?" запись создана
 📄 "Бот Собирап ДР" запись создана
 📄 "Делимся своими AI музыкальными шедеврами (или кринжем)" запись создана
 📄 "Как прожить дольше? Работаем с метаболизмом в разрезе долголетия." запись создана
 📄 "Как я восстановил своё образование и поборол синдром самозванца" запись создана
 📄 "Вастрик 🔥 Кэмп 2024. Как это было? Сербское село, купание в водопаде на рассвете, гонки на FPV-дронах и рейв с полицией" запись создана
 📄 "Селфхостинг: Страдания в обмен на контроль или как осложнить себе жизнь забавы ради" запись создана
 📄 "Как найти работу в Лондоне (даже если вы не в АйТи) - пошаговые лайфхаки от эйчара" запись создана
 📄 "Как я решила купить бюджетную квартиру в никому не известном итальянском городе (и что из этого получилось)" запись создана
 📄 "Хотелось очень мощно и компактно: как я собирал себе маленький ПК" запись создана
 📄 "Ищу работу (Июнь 2024)" запись создана
 📄 "Oceanman - плавание в открытой воде" запись создана
 📄 "Вастрик.Швейцар - антиспам для телеграма" запись создана
 📄 "Скучное будущее" запись создана
 📄 "Об одном социологическом эксперименте (TheButton)" запись создана
 📄 "Wowsy.co | Библиотка интерактивных рассказов для детей 3-8 лет" запись создана
 📄 "Теория шести рукопожатий и МЛМ" запись создана
 📄 "Как я опираюсь на инженерный подход в вопросе своего долголетия" запись создана
 📄 "Клубный Путеводитель: Красноярск" запись создана
 📄 "Чем заняться в поездке на авто?" запись создана

Итого:
📄 Новых постов: 23
📌 Уже существовало: 0
👤 Новых пользователей: 0

Работает только на локальныъ/дев сборках, т.к.

    def handle(self, *args, **options):
        if not settings.DEBUG:
            return self.stdout.write("☢️  Только для запуска в DEBUG режиме")

image

p.s. никогда не работал с django, если где есть "понятийные" ошибки, буду рад, если укажите.

@trin4ik trin4ik requested a review from vas3k as a code owner June 19, 2024 19:44
…/редактирования постав, завязал всё на `save`, чтобы было проще вешать триггеры для того же manticore, если будем внедрять. Не нравится 93 строчка ;((

Добавил описание в инфо для разрабов
vas3k
vas3k previously approved these changes Jun 20, 2024
Copy link
Owner

@vas3k vas3k left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну вроде бы норм

Copy link
Contributor

@igoose1 igoose1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне тоже ок, спасибо за скрипт!

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

Comment on lines 134 to 136
user, created = User.objects.get_or_create(slug=slug, defaults=defaults)

return user, created
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
user, created = User.objects.get_or_create(slug=slug, defaults=defaults)
return user, created
return User.objects.get_or_create(slug=slug, defaults=defaults)


Sometimes you need fill saome posts/users data from real project. For this case you can use `import_posts_to_dev` command.

Command fetch https://vas3k.club/feed.json and copy `is_public=True` posts to your database:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Command fetch https://vas3k.club/feed.json and copy `is_public=True` posts to your database:
Command fetch https://vas3k.club/feed.json and copy public posts to your database:

Copy link
Contributor Author

@trin4ik trin4ik Jun 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igoose1 решил на мотив питона указать, всё же питонисты будут читать. точно надо просто public указать?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@trin4ik, по-твоему тоже ок.

Comment on lines 114 to 115
split = author['url'].split('/')
slug = split[-2]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
split = author['url'].split('/')
slug = split[-2]
*_, slug, _ = author['url'].split('/') # takes SLUG from "https://vas3k.club/user/SLUG/"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igoose1 повторю, я в питоне на уровне фреймворков пару дней, в основном скрипты писал разовые. как скажешь. *_ -- крутая конструкция, почти влюбился

balance=10000,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
membership_started_at=datetime.now(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
membership_started_at=datetime.now(),
membership_started_at=datetime.utcnow(),

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igoose1 my bad, правлю

url = "https://vas3k.club/feed.json?page={}".format(x + 1)
self.stdout.write("📁 {}".format(url))
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю поставить здесь отличимый User-Agent. На случай, если этот скрипт начнут абьюзить.

Suggested change
req.add_header('User-Agent', 'Mozilla/5.0')
req.add_header('User-Agent', 'poststodev')

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igoose1 исправил на posts-to-dev

data = json.load(response)
for item in data['items']:
# приватные нафиг
if not (item['_club']['is_public']):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if not (item['_club']['is_public']):
if not item['_club']['is_public']:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@igoose1 php привычка, поправлю

@trin4ik
Copy link
Contributor Author

trin4ik commented Jun 20, 2024

Пушнул все замечания @igoose1 кроме доки, дока кмк для питонистов будет более понятно с is_public=True, но это на усмотрение сообщества. Мне было бы проще понять то такое public именно по is_public=True или по "is_public": true

@igoose1
Copy link
Contributor

igoose1 commented Jun 20, 2024

@trin4ik, мне кажется, с is_public не так важно. Можно оставить любой вариант.

В общем, по-моему, хороший PR. Такой скрипт я бы хотел видеть в репозитории.

@trin4ik
Copy link
Contributor Author

trin4ik commented Jun 20, 2024

@trin4ik, мне кажется, с is_public не так важно. Можно оставить любой вариант.

В общем, по-моему, хороший PR. Такой скрипт я бы хотел видеть в репозитории.

Ну, он, скрипт, есть у вас. меня беспокоит 93 строчка, из-за (**defaults), т.к. далее есть 100 строка, с post.__dict__.update(defaults), я не уверен, что это правильно. Задаа была -- свести всё к save, чтобы если перейдём на мантикору, скрипты для регена кеша были в одном месте, в методе save.

@vas3k vas3k merged commit 0828c37 into vas3k:master Jun 20, 2024
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants