├── .github └── workflows │ └── scrape.yml ├── README.md ├── index.js ├── package.json └── sonuc.json /.github/workflows/scrape.yml: -------------------------------------------------------------------------------- 1 | name: Run OSYM Scraper 2 | 3 | on: 4 | schedule: 5 | - cron: '*/1 * * * *' # Runs every minute 6 | workflow_dispatch: # Allows you to manually trigger the workflow 7 | 8 | jobs: 9 | scrape: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v3 15 | 16 | - name: Set up Node.js 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: '18.x' 20 | 21 | - name: Install dependencies 22 | run: npm install 23 | 24 | - name: Run scraper 25 | run: npm start 26 | 27 | - name: Commit results 28 | run: | 29 | node index.js # 30 | git add sonuc.json 31 | git config --global user.email "codermert@bk.ru" 32 | git config --global user.name "codermert" 33 | git diff --cached --exit-code --quiet || git commit -m "🕰 Veriler auto güncellendi » @codermert" 34 | git push 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ais_duyurular -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const crypto = require('crypto'); 3 | const https = require('https'); 4 | const cheerio = require('cheerio'); 5 | const fs = require('fs'); 6 | 7 | const allowLegacyRenegotiationforNodeJsOptions = { 8 | httpsAgent: new https.Agent({ 9 | secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT, 10 | }), 11 | }; 12 | 13 | async function scrapeData() { 14 | try { 15 | const response = await axios({ 16 | url: 'https://ais.osym.gov.tr/', 17 | method: 'GET', 18 | headers: { 19 | 'Accept': 'text/html', 20 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' 21 | }, 22 | ...allowLegacyRenegotiationforNodeJsOptions 23 | }); 24 | 25 | const html = response.data; 26 | const $ = cheerio.load(html); 27 | 28 | const results = []; 29 | $('tr[data-surecid]').each((index, element) => { 30 | const examName = $(element).find('td').eq(0).text().trim(); 31 | const operationType = $(element).find('td').eq(1).text().trim(); 32 | const examDate = $(element).find('td').eq(2).text().trim(); 33 | const operationDates = $(element).find('td').eq(3).text().trim(); 34 | const status = $(element).find('td').eq(4).text().trim(); 35 | 36 | results.push({ 37 | 'sinav': examName, 38 | 'islemtipi': operationType, 39 | 'sinavtarihi': examDate, 40 | 'islemtarihi': operationDates, 41 | 'durum': status 42 | }); 43 | }); 44 | 45 | fs.writeFileSync('sonuc.json', JSON.stringify(results, null, 2), 'utf-8'); 46 | 47 | console.log('Veriler başarıyla kaydedildi'); 48 | } catch (error) { 49 | console.error('Error:', error); 50 | } 51 | } 52 | 53 | scrapeData(); 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "osym-scraper", 3 | "version": "1.0.0", 4 | "description": "Scrapes data from the OSYM website and outputs JSON", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "dependencies": { 10 | "axios": "^1.4.0", 11 | "cheerio": "^1.0.0-rc.10", 12 | "crypto": "^1.0.1", 13 | "https": "^1.0.0", 14 | "fs": "0.0.1-security" 15 | }, 16 | "author": "codermert", 17 | "license": "MIT" 18 | } 19 | -------------------------------------------------------------------------------- /sonuc.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sinav": "e-YDS 2025/7 (Almanca/Fransızca)", 4 | "islemtipi": "Başvuru", 5 | "sinavtarihi": "28.06.2025", 6 | "islemtarihi": "03.06.2025 14.00-19.06.2025 23.59", 7 | "durum": "Devam Ediyor" 8 | }, 9 | { 10 | "sinav": "e-YDS 2025/8 (Arapça/Rusça)", 11 | "islemtipi": "Başvuru", 12 | "sinavtarihi": "29.06.2025", 13 | "islemtarihi": "03.06.2025 14.00-19.06.2025 23.59", 14 | "durum": "Devam Ediyor" 15 | }, 16 | { 17 | "sinav": "2025 - DGS", 18 | "islemtipi": "Başvuru", 19 | "sinavtarihi": "20.07.2025", 20 | "islemtarihi": "13.06.2025 10.00-13.06.2025 23.59", 21 | "durum": "Başlamadı" 22 | } 23 | ] --------------------------------------------------------------------------------