Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PHP] XML-feeds converteren*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb verschillende datafeeds (XML) van klanten, deze zijn allemaal anders opgebouwd en hebben verschillende namen voor de elementen. Ik vraag de klanten om een feed aan te leveren (wordt meerdere keren per dag geupdate) in hetzelfde format, maar het zou prettig zijn om met elke xml-feed overweg te kunnen.

Daarvoor heb ik dus een xml-converter nodig, waarbij je aangeeft welke elementen in de uiteindelijke feed komen met de uiteindelijke naam. Nu weet ik dat het mogelijk zou moeten zijn met Yahoo Pipes (pipes.yahoo.com), maar het gebruik is niet erg gebruiksvriendelijk en ik verwacht weinig focus van Yahoo op dit product.

Mogelijkheid is natuurlijk om zelf zo'n converter te bouwen. Het wordt echter uitgebreid als je dit generiek wilt oplossen. Heeft iemand nog suggesties om hier mee om te gaan?

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 20-11 21:15
In welke taal willen we aan het kletsen?
Om wat voor volumes gaat het?
Wat vind je niet gebruiksvriendelijk aan Yahoo Pipes?

Lijkt me erg ingewikkeld om een volledig automatisch en generieke converter te maken. Aangezien je het over klanten hebt, kun je het omzetten van een afwijkend XML-formaat ook doorberekenen natuurlijk.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Als je even aangeeft wat je zelf verder hebt geprobeerd, in welke taal / met welke technologie je het wilt aanpakken en wat je tot nu toe hebt gevonden, dan kan ik o.a. de titel voor je aanpassen :)

Het lijkt erop alsof je een soort (transformatie)hub moet bouwen die de translaties voor je doet (per type XML-feed). Als je dat eenmaal hebt opgezet, dan kan je een nieuwe feed simpelweg toevoegen door een configuratie/translatie-bestand aan te maken; dit voorkomt dat je elke keer je applicatie opnieuw moet aanpassen.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Terechte reacties inderdaad. Ik ben bezig met PHP om dit voor elkaar te krijgen (of externe service vinden...). Het kunnen om grote datafeeds gaan, van soms wel 100.000-en items. De converting moet wel elk uur plaatsvinden. Probleem zijn dus ook time-outs waar ik dan tegenaan loop.

De uiteindelijke feed bevat een 6-tal elementen met vaste namen, die gevuld moeten worden met specifieke elementen uit de bronfeed.

Mijn voornaamste probleem zijn de grote bestanden, waardoor PHP of server een time-out zouden geven. Vandaar dat ik nu de hoop had gelegd bij externe tool.

[ Voor 15% gewijzigd door Verwijderd op 12-02-2014 20:02 ]


  • Solopher
  • Registratie: December 2002
  • Laatst online: 30-10 12:28
Waarom draai je PHP dan niet rechtstreeks vanaf shell? Bij een beetje elke serieus webhost zou dit gewoon moeten kunnen. Dan werkt het ook nog eens een stuk sneller dan via een "webserver".

Verwijderd

Topicstarter
Solopher schreef op woensdag 12 februari 2014 @ 21:46:
Waarom draai je PHP dan niet rechtstreeks vanaf shell? Bij een beetje elke serieus webhost zou dit gewoon moeten kunnen. Dan werkt het ook nog eens een stuk sneller dan via een "webserver".
Maar dan bestaat nog steeds de kans dat PHP een timeout geeft toch?

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Verwijderd schreef op donderdag 13 februari 2014 @ 09:36:
Maar dan bestaat nog steeds de kans dat PHP een timeout geeft toch?
Een script zelf timed niet out, het is de webserver die vindt dat het script er te lang over doet. In princiepe dan. PHP heeft daar inderdaad default instellingen voor, maar die zou je moeten kunnen overriden, helemaal op de commandline. Het heeft zo te zien in ieder geval een set_time_limit ( int $seconds ) call die je kunt gebruiken.

https://niels.nu


  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 20-11 21:15
Verder is de grootte van het bestand (voor deze vraag) niet van belang, want zoals aangegeven zijn daar prima oplossingen voor. Het ging me meer om het aantal bestanden/klanten. Als dat om een tiental gaat voldoet mijn (en dat van BtM909) idee: Met een klein beetje config aanpassing heb je een nieuwe geactiveerd.

Als het om 10k verschillende feeds gaat, wordt het een ander verhaal.

Bij kleinere getallen is het misschien ook een optie om de klant gewoon eens te vragen naar een feed zoals jij die wenst. Bij grotere getallen kan dat ook, maar dan moeten de klanten wel afhankelijk zijn van jou. Dan bepaal je je eigen regels ;)
Hydra schreef op donderdag 13 februari 2014 @ 11:24:
Het heeft zo te zien in ieder geval een set_time_limit ( int $seconds ) call die je kunt gebruiken.
Voor de volledigheid: http://www.php.net/manual/en/function.set-time-limit.php
Als dat niet lukt op zoek naar een andere host of ergens een VPS(je) afnemen.

  • Solopher
  • Registratie: December 2002
  • Laatst online: 30-10 12:28
Uhm, ik bedoelde juist niet de set time limit.

Als je iets als
code:
1
nice -n 19 /usr/local/php mijnbestand.php


Dan zul je merken dat het vele malen sneller gaat dan via een webserver. Timeouts hebben hier vrij weinig mee te maken.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Solopher schreef op donderdag 13 februari 2014 @ 19:05:
Dan zul je merken dat het vele malen sneller gaat dan via een webserver. Timeouts hebben hier vrij weinig mee te maken.
Hij heeft het over de standaard timeout van het php proces. Dat kapt, als het zo ingesteld staat in de php.ini (of whatever) gewoon botweg de executie af.

https://niels.nu


  • Solopher
  • Registratie: December 2002
  • Laatst online: 30-10 12:28
Yeah, dat snap ik wel :). Maar ik reageerde op zijn post op de mijne, ik weet wel dat je timelimit kunt aanpassen maar dat heeft op een shell script geen invloed.

Zie ook php.ini
code:
1
2
3
4
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 30

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 20-11 21:15
Solopher schreef op donderdag 13 februari 2014 @ 20:02:
Maar ik reageerde op zijn post op de mijne
Ik reageerde toch echt op Hydra :P
Pagina: 1