• 30-01-2024, 17:10:15
    #1
    Merhabalar bir bot yapıyorum veri çekiyor geliyor veritabanına yazıyor. Basit anlatımı bu şekilde ama sorunum şu ben verileri vs alıyorum aslında sorun veritabanına kaydetmede neden olduğunu anlayamadım.

    Kullanılan : puppeteer
    Dosya Yapım :
    botjs/
    |-- controllers/
    | |-- product.js
    |
    |-- database/
    | |-- db.js
    |
    |-- productBot/
    | |-- bot.js
    |
    |-- routes/
    | |-- product.js
    |
    |-- index.js

    Bot.js içeriği
    // productBot/bot.js
    const puppeteer = require('puppeteer');
    const { createproduct, queryproduct } = require('../controllers/product.js');
    const scrape = async () => {
        try {
            const queryResults = await queryproduct();
            const pznNumbers = queryResults.map(result => result.query_pzn);
            console.log("Ne varmış : ",pznNumbers);
            for (const pznno of pznNumbers) {
                await scrapeDetails(pznno);
            }
            console.log("Tüm scrape işlemleri tamamlandı");
        } catch (error) {
            console.error("Hata oluştu:", error);
        }
    };
    const scrapeDetails = async (pznno) => {
        const url = `url=${pznno}`;
        const browser = await puppeteer.launch({ headless: 'new' });
        const page = await browser.newPage();
        await page.goto(url);
        try {
            const tableSelector = 'table.products';
            await page.waitForSelector(tableSelector);
            const products = await page.$$eval(`${tableSelector} tbody tr`, rows => {
                return rows.map(row => {
    ...... Burada çekilen veriler var
                    };
                    return productDetails;
                });
            });
            const jsonData = JSON.stringify(products, null, 2);
            createproduct(jsonData);
            console.log('createproduct fonksiyonu çağrıldı:', jsonData);
        } catch (error) {
            console.error(`Hata: Tablo bulunamadı - ${error.message}`);
        }
        browser.close();
    }
    scrape();
    verikaydetme yeri.
    // controllers/product.js içeriği
    const mysql = require('mysql');
    const dbConnection = require('../database/db.js');
    const productData = require('../productBot/bot.js')
    const queryproduct = () => {
        return new Promise((resolve, reject) => {
            const queryData = "SELECT * FROM tablo_pzn";
            dbConnection.query(queryData, (err, results) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(results);
                }
            });
        });
    };
    const getproduct = (req, res) => {
        try {
            const query = 'SELECT * FROM ilaclar';
            dbConnection.query(query, (err, results) => {
                if (err) {
                    console.error('Sorgu hatası:', err.stack);
                    return res.status(500).json({ error: 'Veritabanı sorgusu gerçekleştirilemedi' });
                }
                console.log('Sorgu Sonuçları:', results);
                // Sorgu sonuçları
                return res.json({
                    status: "OK",
                    message: "İlaç bilgileri başarıyla alındı.",
                    data: results
                });
            });
        } catch (error) {
            console.error('İşlem hatası:', error);
            return res.status(500).json({ error: 'Bir hata oluştu' });
        }
    }
    const createproduct = (productData) => {
        try {
            const productDetails = JSON.parse(productData);
            console.log("Create Product productDetails :",productDetails);
            const insertQuery = 'INSERT INTO ilaclar (title, prescription, unit, origin, manufacturer, price, unitPrice, link) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
            const values = [
    ... gelen verilerin içeriği
            ];
            dbConnection.query(insertQuery, values, (err, results) => {
                if (err) {
                    console.error('Veri eklenirken hata oluştu:', err.stack);
                    return;
                }
                console.log('Veri başarıyla eklendi.', results.insertId);
            });
        } catch (error) {
            console.error('JSON dönüşüm hatası:', error);
        }
    };
    module.exports = { getproduct, createproduct, queryproduct };
  • 30-01-2024, 17:24:31
    #2
    Bu attığınız verilere dayanarak, kimse size yardımcı olamaz. Debug çıktısı lazım.
  • 30-01-2024, 17:30:09
    #3
    Developer adlı üyeden alıntı: mesajı görüntüle
    Bu attığınız verilere dayanarak, kimse size yardımcı olamaz. Debug çıktısı lazım.
    Create Product productDetails : [ Burası, createproduct tan geliyor.
    createproduct fonksiyonu çağrıldı: [ Burası bot.js'den geliyor

    [nodemon] watching extensions: js,mjs,cjs,json
    [nodemon] starting `node index.js`
    Server 5001 portunda ayağa kalktı
    Connected!
    Ne varmış : [ '580960', '4320173', '8906763' ]
    Create Product productDetails : [
    {
    title: '25mg',
    prescription: 'rezeptpflichtig',
    unit: '12 Stück',
    origin: 'PZN 580960',
    manufacturer: 'Kohlpharma GmbH',
    price: '107,60 €',
    unitPrice: '8,97 € / 1 Stück',
    link: '/shop/-25mg-pzn580960'
    }
    ]
    createproduct fonksiyonu çağrıldı: [
    {
    "title": "25mg",
    "prescription": "rezeptpflichtig",
    "unit": "12 Stück",
    "origin": "PZN 580960",
    "manufacturer": "Kohlpharma GmbH",
    "price": "107,60 €",
    "unitPrice": "8,97 € / 1 Stück",
    "link": "/shop/-25mg-pzn580960"
    }
    ]
    Veri başarıyla eklendi. 1
    Create Product productDetails : [
    {
    title: '100mg',
    prescription: 'rezeptpflichtig',
    unit: '4 Stück',
    origin: 'PZN 4320173',
    manufacturer: 'Eurimpharm Arzneimittel GmbH',
    price: '44,64 €',
    unitPrice: '11,16 € / 1 Stück',
    link: '/shop/-100mg-pzn4320173'
    }
    ]
    createproduct fonksiyonu çağrıldı: [
    {
    "title": "100mg",
    "prescription": "rezeptpflichtig",
    "unit": "4 Stück",
    "origin": "PZN 4320173",
    "manufacturer": "Eurimpharm Arzneimittel GmbH",
    "price": "44,64 €",
    "unitPrice": "11,16 € / 1 Stück",
    "link": "/shop/-100mg-pzn4320173"
    }
    ]
    Veri başarıyla eklendi. 2
    Create Product productDetails : [
    {
    title: '25mg',
    prescription: 'rezeptpflichtig',
    unit: '4 Stück',
    origin: 'PZN 8906763',
    manufacturer: 'Pfizer Ofg Germany GmbH',
    price: '51,53 €',
    unitPrice: '12,88 € / 1 Stück',
    link: '/shop/-25mg-pzn8906763'
    }
    ]
    createproduct fonksiyonu çağrıldı: [
    {
    "title": "25mg",
    "prescription": "rezeptpflichtig",
    "unit": "4 Stück",
    "origin": "PZN 8906763",
    "manufacturer": "Pfizer Ofg Germany GmbH",
    "price": "51,53 €",
    "unitPrice": "12,88 € / 1 Stück",
    "link": "/shop/-25mg-pzn8906763"
    }
    ]
    Tüm scrape işlemleri tamamlandı
    Veri başarıyla eklendi. 3