Houseβ―Research β ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ π‘ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΒ Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡΠΈ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΡ Β ΡΒ ΠΏΠΎΠΌΠΎΡΡΡ π§ Β ΠΠ ΠΈΒ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΠΊΡΠ°ΡΠΎΡΠ½ΡΠ΅ ΡΠ²ΠΎΠ΄ΠΊΠΈ Π²Β Telegram. ΠΠΊΠΎΠ½ΠΎΠΌΡΡΠ΅ ΡΠ°ΡΡ ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈΒ ΠΏΠΎΠ»ΡΡΠ°ΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ!
π ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
π ΠΡΠ»ΡΡΠΈβΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ | Avito (HTMLβΠΏΠ°ΡΡΠ΅ΡΒ avito-parser Β πΒ Π²Π΅ΡΠΊΠ°) + Π¦ΠΈΠ°Π½ (Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ API). |
π€ ΠΠβΠΎΡΠ΅Π½ΠΊΠ° | ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ΅ΠΉΡΠΈΠ½Π³Π° Β«Π²ΡΠ³ΠΎΠ΄Π½ΠΎΒ /Β ΠΏΠ΅ΡΠ΅ΠΏΠ»Π°ΡΠ°Β» ΡΒ ΡΡΡΡΠΎΠΌ ΡΠ΅Π½Ρ, ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈΒ ΡΠΎΡΠΎ. |
π« ΠΡΡΡΡΡΠΉ Π·Π°ΠΏΡΡΠΊ | DockerβΠΊΠΎΠΌΠΏΠΎΠ· Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° ΠΈΒ Denoβtasks Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. |
π Π’ΡΠ°Π½ΡΠΏΠΎΡΡ + ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ | ΠΠΎΠΈΡΠΊ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΈΒ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡβΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². |
πΌοΈ ΠΠΎΠ»Π»Π°ΠΆ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ | Π‘ΠΊΠ»Π΅ΠΉΠΊΠ° ΡΠΎΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²Β Π΅Π΄ΠΈΠ½ΡΠΉ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ»Π»Π°ΠΆ. |
π¬ ΠΡΠΏΡΠ°Π²ΠΊΠ° Π²Β Telegram | Π€ΠΎΡΠΎβΠ°Π»ΡΠ±ΠΎΠΌ β HTMLβΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΒ ΡΠ΅ΠΌΠ°ΠΌ ΡΠ°ΡΠ°. |
π³ DockerΒ Ready | ΠΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ (ghcr.io ) Π΄Π»Ρ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π°Β ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ VPS. |
graph LR
subgraph Parsers
AV[AvitoΒ Parser] -->|HTML| KV[(Deno KV)]
CI[CiANΒ Searcher] -->|JSON| KV
end
KV --> WF[Workflow Engine π―]
WF --> AI[Gemini/OpenAI π€]
WF --> TG[Telegram Bot βοΈ]
- ΠΡΠ΄Π΅Π»ΡΠ½Π°Ρ Π²Π΅ΡΠΊΠ°
avito-parser
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π½Π°Β Deno. - Π Π°Π· Π²Β ΡΠ°Ρ π (ΡΠ΅ΡΠ΅Π·
Deno.cron
) ΠΎΠ½ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° Avito ΠΈΒ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π»ΠΎΡ Π²Βexport/*.html
. - HTML Π·Π°ΡΠ΅ΠΌ ΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΠΈΒ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΠΉ ΡΡΠ½ΠΊΠ°.
- ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊΒ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊΡ Π¦ΠΈΠ°Π½ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ Π°Π³Π΅Π½ΡΠ°. ΠΠ°Π»ΠΎΠ³ΠΈΠ½ΡΡΠ΅ΡΡ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²Β ΠΏΠΎΠΈΡΠΊ ΠΈΒ ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π²ΡΠ΅ cookie Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΡΠΈΠ°Π½Ρ β ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Β
CIAN_SEARCH_COOKIE
. - ΠΠ°ΡΡΠ΅Ρ Π±Π΅ΡΡΡ ΡΠΈΠ»ΡΡΡ ΠΈΠ·Β
.yaml
βΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ cookie ΠΈΒ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ JSON ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ.
Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΠΊΠ»ΡΡΠΈ OpenRouter, Gemini, Nvidia, etc.. ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ:
OPENROUTER_API_KEY=key_one,key_two,key_three
GEMINI_API_KEY=gk1,gk2
ΠΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ Π»ΠΈΠΌΠΈΡΠ° β‘οΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡ Π½Π°Β ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Π½.
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°: ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ + AvitoΒ Parser.
version: "3.9"
services:
house-research:
image: ghcr.io/zxcnoname666/house-research:latest
container_name: house-research
restart: always
volumes:
- ./kv:/app/kv # DenoΒ KV (SQLite)
- ./conf:/app/conf # ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ YAML
- ./avito-export:/avito-export # HTML ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ
env_file:
- .env
avito-parser:
image: ghcr.io/zxcnoname666/avito-parser:latest
container_name: avito-parser
restart: always
volumes:
- ./avito-export:/app/export
environment:
AVITO_URL: "https://www.avito.ru/..." # Π²Π°Ρ ΡΠΈΠ»ΡΡΡ
$ docker compose up -d
ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅
.env
Π½Π°Β ΠΎΡΠ½ΠΎΠ²Π΅.env.example
ΠΈΒ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ Telegram, OpenRouter/Gemini, RapidAPI ΠΈΒ cookie Π¦ΠΈΠ°Π½βΠ°Π³Π΅Π½ΡΠ°.
# ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
$ git clone https://github.com/zxcnoname666/House-Research.git
$ cd House-Research
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (JSR + Deno)
$ deno task install
# DevβΡΠ΅ΠΆΠΈΠΌ ΡΒ Π³ΠΎΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ
$ deno task dev --unstable
ΠΠ»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Avito Parser:
$ git checkout avito-parser
$ deno run -A src/main.ts
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ | ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
BOT_TOKEN |
β | Π’ΠΎΠΊΠ΅Π½ TelegramβΠ±ΠΎΡΠ°. |
TELEGRAM_CHAT_ID |
β | ID ΡΠ°ΡΠ°/ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ. |
AVITO_URL |
β | URL ΠΏΠΎΠΈΡΠΊΠ° Avito (ΡΒ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°). |
CIAN_SEARCH_COOKIE |
β | Cookie Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΈΠ»Ρ Π°Π³Π΅Π½ΡΠ° Π¦ΠΈΠ°Π½. |
OPENROUTER_API_KEY |
β | ΠΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ. |
GEMINI_API_KEY |
β | ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ. |
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ β Π²Β
.env.example
.
- ΠΡΠΊΡΠΎΠΉΡΠ΅ issueΒ π ΡΒ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π±Π°Π³Π° ΠΈΠ»ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ.
- Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ fork β
feature/myβawesomeβfeature
. - ΠΡΠΏΡΠ°Π²ΡΡΠ΅ PR ΡΒ ΡΡΡΠΊΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.
- ΠΠΎΠ»ΡΡΠΈΡΠ΅ πΒ ΡΠ΅Π²ΡΡ ΠΈΒ πΒ merge!
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΒ Π½Π΅Β Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ β!