ตัวอย่างโค้ดดึง หมวดหมู่สินค้าใน lazada

สวัสดีคับ บทความนี้ผมแค่จะมาแปะโค้ดที่ได้เขียนไว้เท่านั้น เผื่อใครนำไปเป็นตัวอย่างก็สามารถใช้ได้คับ

วันนี้ผมได้เขียนโปรแกรมดึงหมวดหมู่สินค้าใน lazada ซึ่งหมวดหมู่ใน lazada ก็จะมีเยอะมาก โดยลิ้งที่เราจะยิงเข้าไปเพื่อเก็บข้อมูลคือ

https://sellercenter.lazada.co.th/product/newpublish/api.product.post.category.async?optType=queryCategoryCascade

ผมลัพธ์ที่จะได้ ข้อมูลจะเป็น json นะคับ ตัวอย่างข้อมูล json คือ

นำข้อมูลมาจัด format ซะหน่อย

ลองดู format นะคับ จาก note แรกไป note 2 ซึ่งยังไม่จบ มันจะต่อกันไปเรื่อย ๆ คับ

มาลองเขียน java กันเลย

public static final String MAIN_URL = "https://sellercenter.lazada.co.th/product/newpublish/api.product.post.category.async?optType=queryCategoryCascade";
    private void addCategory() throws IOException {
        Map<String, String> cookies = new HashMap<>();
        
        // TODO set Cookir

        String json = Jsoup.connect(MAIN_URL).cookies(cookies).userAgent(HttpUtils.USERAGENT).timeout(HttpUtils.TIME_OUT).ignoreContentType(true).execute().body();

        JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);

        JsonArray jsonCatMain = jsonObject.get("data").getAsJsonArray();
        for(int i = 0; i < jsonCatMain.size(); i++){
            JsonObject jsonCatMainObj = jsonCatMain.get(i).getAsJsonObject();
            String name = jsonCatMainObj.get("name").getAsString();
            int id = jsonCatMainObj.get("id").getAsInt();

            System.out.println("id: " + id + ", name: " + name);
            jdbcTemplate.update(sqlInsert, id, name, 0, 0, "", false);

            getCategory(cookies, id);
        }
    }

    public static final String sqlInsert = "insert into category (id, cat_name, primary_id, parent_id, parent_ids, leaf) values (?, ?, ?, ?, ?, ?) ";

    public void getCategory(Map<String, String> cookies, int sourceId) throws IOException {
        System.out.println("get -> " + sourceId);
        String json = Jsoup.connect(MAIN_URL + "&amp;id=" + sourceId).cookies(cookies).userAgent(HttpUtils.USERAGENT).timeout(HttpUtils.TIME_OUT).ignoreContentType(true).execute().body();

        JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);

        JsonArray jsonCatMain = jsonObject.get("data").getAsJsonArray();
        for(int i = 0; i < jsonCatMain.size(); i++){
            JsonObject jsonCatMainObj = jsonCatMain.get(i).getAsJsonObject();
            JsonElement nameElement = jsonCatMainObj.get("name");
            if(nameElement == null){
                continue;
            }
            String name = jsonCatMainObj.get("name").getAsString();

            int id = jsonCatMainObj.get("id").getAsInt();
            boolean leaf = jsonCatMainObj.get("leaf").getAsBoolean();
            JsonArray idpaths = jsonCatMainObj.get("idpath").getAsJsonArray();
            int primary = idpaths.get(0).getAsInt();

            StringBuilder sourceIds = new StringBuilder();
            for (int j = 0; j < idpaths.size(); j++) {
                if(j == 0) {
                    sourceIds.append(idpaths.get(j).getAsInt());
                }
                else {
                    sourceIds.append(",").append(idpaths.get(j).getAsInt());
                }
            }

            jdbcTemplate.update(sqlInsert, id, name, primary, sourceId, sourceIds.toString(), leaf);

            if(!leaf){
                getCategory(cookies, id);
            }
        }
    }

ผมจะใส่ comment TODO ไว้สำหรับใส่ cookie ของแต่ละคนนะคับ เพราะ เราต้องเข้าสู่ระบบก่อน ถึงจะดึง หมวดหมู่สินค้าได้

จากนั้น หมวดหมู่จะจบอยู่ที่ leaf เป็น true นะคับ ซึ่งเป็นการบอกว่า อันนี้นะ เป็นยอดของมันแล้วไม่มีต่อแล้ว

เพียงแค่นี้ก็รันได้เลยคับ

ผลลัพธ์ที่ได้ก็ออกมาดูดีคับ

ลองนำไปใช้กันดูคับ

Tags:,

Add a Comment

Your email address will not be published. Required fields are marked *