Geautomatiseerd adverteren op 2dehands



Geautomatiseerd adverteren op 2dehands met Django Model

Doel

Ik heb een Django site met een voorraad aan producten die ik op 2dehands wil posten. Ik wil dit ook automatiseren door de grote aantal van producten. Zo heb ik gevonden dat 2dehands verschillende partners heeft die deze service aanbieden en die ik kan gebruiken om mijn doel te bereiken.

Werking

Om mijn producten te uploaden ga ik mijn django models moeten omzetten naar een xml feed die ik bij de gekozen tool kan uploaden in mijn geval is dat channable. Daarna kan ik een site kiezen waar ik mijn producten ga uploaden in mijn geval is dat 2dehands. 

Proces

Eerst moet je de data uit je model omvormen in een xml file.

Dat kan je doen met de volgende code:

Eerst in de views.py van je app moet je een view maken waar je de xml file gaat kunnen zien


*from django.http import HttpResponse

from xml.etree.ElementTree import Element, SubElement, tostring

from django.utils.timezone import localtime

from vehicles.models import Vehicle


def vehicle_xml_feed(request):

    root = Element("vehicles")


    for v in Vehicle.objects.all():

        vehicle_el = SubElement(root, "vehicle")


        SubElement(vehicle_el, "id").text = str(v.id)

        SubElement(vehicle_el, "trader").text = str(v.trader.name if v.trader else "")

        SubElement(vehicle_el, "merk").text = str(v.vehicle_merk.name if v.vehicle_merk else "")

        SubElement(vehicle_el, "model").text = str(v.vehicle_model.name if v.vehicle_model else "")

        SubElement(vehicle_el, "price").text = str(v.price)

        SubElement(vehicle_el, "fuel_type").text = v.fuel_type or ""

        SubElement(vehicle_el, "first_registration").text = (

            localtime(v.first_registration).isoformat() if v.first_registration else ""

        )

        SubElement(vehicle_el, "description").text = v.description or ""

        SubElement(vehicle_el, "mileage").text = str(v.mileage or 0)

        SubElement(vehicle_el, "power_kw").text = str(v.power_kw or 0)

        SubElement(vehicle_el, "power_hp").text = str(v.power_hp or 0)

        SubElement(vehicle_el, "gearbox").text = v.gearbox or ""

        SubElement(vehicle_el, "carrosserietype").text = v.carrosserietype or ""

        SubElement(vehicle_el, "seats").text = str(v.seats or "")

        SubElement(vehicle_el, "doors").text = str(v.doors or "")

        SubElement(vehicle_el, "engine_size").text = v.engine_size or ""

        SubElement(vehicle_el, "emission_class").text = v.emission_class or ""

        SubElement(vehicle_el, "colour").text = v.colour or ""

        SubElement(vehicle_el, "paint").text = v.paint or ""

        SubElement(vehicle_el, "status").text = v.status or ""

        SubElement(vehicle_el, "url_canonical").text = v.url_canonical or ""


        SubElement(vehicle_el, "created").text = localtime(v.created).isoformat()

        SubElement(vehicle_el, "modified").text = localtime(v.modified).isoformat()


    xml_string = tostring(root, encoding="utf-8")

    return HttpResponse(xml_string, content_type="application/xml")*


Daarna moet je in urls.py de path naar jouw view definieren 


path("feed.xml/", vehicle_xml_feed, name="vehicle_xml_feed"),


Als je het nog niet hebt gedaan voeg ook je app al toe aan de urls.py van je project.

Verder ga je op de door jouw gegeven url de xml file hebben. Als je jouw django project al aan het hosten bent op een server en die publiek staat kan je de link gewoon delen met channables anders moet je de file nog zelf hosten dat heb ik ook gedaan aan de hand van vercel. Hiervoor maak je een github repository die er zo moet uitzien.



Dus je zet je xml file in de public folder en de json config file is niet verplicht maar als je die toch wil maken kan je opzoeken wat zo een file moet bevatten. Daarna connecteer je gewoon je github account aan je vercel account en deploy je jouw project dus de github repo die we net hadden gemaakt. 
Daarna ga jij naar de link waar je project is gehost door vercel en voeg je er de naam van je file achter dus https://projectnaam.vercel.app/naamfile.xml. Nadit zou je normaal gezien gewoon de channables setup moeten kunnen volgen en alles zou moeten werken.






Comments

Popular posts from this blog

Basis Informatie C++

C++ Termen