$> ./join
--role=developer
Стани доброволец-програмист и помогни да автоматизираме събирането на данни за общинските съвети чрез API.
Проектът „Под ОКО“ е напълно отворен и безплатен. Всички данни се поддържат от доброволци – граждани, журналисти и програмисти.
Ако си разработчик (независимо от езика – PHP, Python, JavaScript, Go и др.), можеш да помогнеш значително, като напишеш скрипт, който автоматично:
- ◉ Извлича информация за предстоящи или минали заседания от сайта на твоята община
- ◉ Качва ги в нашата платформа чрез публичното API
Така ще спестиш часове ръчна работа и ще направим данните по-пълни и актуални.
Пиши ни във Facebook: facebook.com/podoko.site
Кажи коя община искаш да поемеш – ще ти създадем акаунт с роля "contributor" и достъп само до нея.
curl -X POST https://pod-oko.site/api/login \
-H "Content-Type: application/json" \
-d '{
"email": "your@email.com",
"password": "your_password"
}'
[RESPONSE: { "token": "YOUR_API_TOKEN", "expires": "never" }]
curl -X POST https://pod-oko.site/api/council-sessions \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"municipality_id": 5,
"date": "2025-12-20",
"topic": "Редовно заседание",
"time": "10:00",
"description": "Обсъждане на бюджета",
"result": "Приети 15 решения",
"link": "https://youtu.be/abc123"
}'
import requests
# Authentication
login = requests.post("https://pod-oko.site/api/login", json={
"email": "your@email.com",
"password": "your_password"
})
token = login.json()["token"]
# Upload session
headers = {"Authorization": f"Bearer {token}"}
data = {
"municipality_id": 5,
"date": "2025-12-20",
"topic": "Заседание от Python",
"time": "14:00"
}
response = requests.post(
"https://pod-oko.site/api/council-sessions",
json=data,
headers=headers
)
print(f"[UPLOAD_STATUS]: {response.status_code}")
const axios = require('axios');
async function uploadSession() {
// Authentication
const login = await axios.post('https://pod-oko.site/api/login', {
email: 'your@email.com',
password: 'your_password'
});
const token = login.data.token;
// Upload session
const session = await axios.post(
'https://pod-oko.site/api/council-sessions',
{
municipality_id: 5,
date: '2025-12-20',
topic: 'Заседание от Node.js',
time: '15:00'
},
{ headers: { Authorization: `Bearer ${token}` } }
);
console.log(`[UPLOAD_STATUS]: ${session.status}`);
}
uploadSession();
<?php
$ch = curl_init('https://pod-oko.site/api/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'email' => 'your@email.com',
'password' => 'your_password'
]));
$response = curl_exec($ch);
$token = json_decode($response, true)['token'];
curl_close($ch);
// Upload session
$ch = curl_init('https://pod-oko.site/api/council-sessions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'municipality_id' => 5,
'date' => '2025-12-20',
'topic' => 'Заседание от PHP',
'time' => '16:00'
]));
$result = curl_exec($ch);
echo "[UPLOAD_STATUS]: " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
{
"status": "success",
"data": {
"id": 12345,
"municipality_id": 5,
"date": "2025-12-20",
"topic": "Редовно заседание",
"time": "10:00",
"created_at": "2025-12-20T10:30:00Z"
},
"message": "Session uploaded successfully"
}
$> ./waiting_for_you
Свържи се с нас и заедно ще направим данните за всички 265 общини пълни и актуални.
λ> ./connect --platform=facebook --action=join →