[Python] Realtime informatie uit Google Chrome?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Fred-Erik
  • Registratie: Oktober 2003
  • Laatst online: 18-04 18:51
Beste Tweakers,

Na veel zoeken kom ik er niet uit hoe ik dit handig kan aanpakken. De casus is als volgt: ik wil een taalgebruikfilter voor Netflix bouwen. Ik heb al zoiets gemaakt wat werkt voor VLC in Python. Dit door uit de ingebouwde webserver van VLC de huidige playback time uit te lezen, en doordat ik met de ondertiteling weet wat er gezegd wordt het geluid op het juiste moment even te muten.

Nu wil ik hetzelfde doen voor Netflix, maar dan moet ik wel de huidige afspeeltijd hebben. Netflix in de browser is HTML5, dus het lijkt me dat het mogelijk moet zijn om het HTML-element met de tijd te extraheren. Alleen zijn alle oplossingen om dit programmatisch te doen erop gericht om dit op de achtergrond te doen met bv een HTTP-request, en is hier juist essentieel dat het element wordt uitgelezen uit de huidige browserwindow. Een GUI-automatiseringstaal is niet geschikt omdat de tijd niet steeds zichtbaar in beeld is (maar wel als HTML element aanwezig). Het is al mogelijk met een extensie om de ondertiteling te vervangen door je eigen bestand, dus dat probleem is al opgelost.

Waar ik aan dacht was om een Chrome extensie te maken die de informatie uitleest en vervolgens als webserver 'broadcast', die ik dan door mijn op de achtergrond draaiende Python scriptje kan laten uitlezen. Maar da's allemaal erg omslachtig en lastig. Wat zou een goede manier zijn om dit wel te laten werken?

Alvast bedankt voor de hulp! :)

Acties:
  • 0 Henk 'm!

  • Johnsel
  • Registratie: Februari 2004
  • Laatst online: 08-03 21:07
Maak een eigen chrome extensie?

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Chome-extensie lijkt me de enige stabiele oplossing om dergelijke informatie uit de HTML-tag naar buiten te krijgen. Dit hoeft niet veel meer dan een stukje javascript van een tiental regels te zijn.

Wellicht dat je een websocket kunt gebruiken om directe communicatie tussen je extensie en Python-script te realiseren, in plaats van losse http requests.

Acties:
  • 0 Henk 'm!

  • Fred-Erik
  • Registratie: Oktober 2003
  • Laatst online: 18-04 18:51
Bedankt voor de tips! Hoe zou dat werken, met WebSockets? Weet je mss een voorbeeld te vinden?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:15
Kun je niet alles in de Chrome extension inbouwen? Waar heb je precies Python voor nodig?

Acties:
  • 0 Henk 'm!

  • Fred-Erik
  • Registratie: Oktober 2003
  • Laatst online: 18-04 18:51
Het kan in principe wel helemaal in een extensie (en het zou netter zijn), maar ik hergebruik mijn bestaande code graag.

Ondertussen heb ik het uitlezen van de gegevens uit Netflix die ik nodig heb af en dus de Javascript-kant klaar, die de informatie via GET-requests naar een Python webserver stuurt. Maar hoe moet ik die informatie dan goed ontvangen? Ik weet niks van architecturen van webserver - client communicatie, maar wat ik wil is dat ik de informatie die ik via GET-requests naar Python stuur daar als variabelen kan gebruiken in mijn bestaande while-loop.

Wat ik gedaan heb is met cherrypy een server aanmaken, en dan in de class waar je de reactie van de server op een request definieert de code uit mijn eerdere while-loop gegooid (in aangepaste vorm natuurlijk). Alleen dan wordt de code door elke request onderbroken, wat niet handig is als ik elke 0.1 seconde een request binnen krijg van mijn extensie, en eerst de ondertiteling wil downloaden en filteren (wat nu dus in 0.1 seconde moet omdat het anders onderbroken wordt).

Moet ik ipv hiervan een apart Python script maken die de informatie uit de requests van de extensie ontvangt en van waaruit ik dan vanuit mijn normale Python code met requests weer de data ophaal? Dit klinkt aan alle kanten fout, maar hoe het goed moet snap ik niet, dus graag weer hulp. :)

Edit: als het daar duidelijker van wordt, hier de code van de extensie en hier de code van de Python-kant.

[ Voor 6% gewijzigd door Fred-Erik op 09-05-2015 22:20 ]


Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
Begrijp ik het goed dat je de subs elke keer opnieuw download? Ik zou die dingen cachen. Dat bespaart requesttijd en dataverkeer.

Acties:
  • 0 Henk 'm!

  • Fred-Erik
  • Registratie: Oktober 2003
  • Laatst online: 18-04 18:51
Devilly schreef op zondag 10 mei 2015 @ 10:05:
Begrijp ik het goed dat je de subs elke keer opnieuw download? Ik zou die dingen cachen. Dat bespaart requesttijd en dataverkeer.
Dat gebeurd al; de gebruiker krijgt de keuze om bestaande lokale subtitles te gebruiken en bestaande filterbestanden of nieuwe te downloaden en maken.

Wat me trouwens bij een probleem bepaald in het verlengde van mijn vorige: ik gebruikte daarvoor raw_input() in Python, maar dat werkt niet hier omdat met elk binnenkomend request van de Chrome extensie de loop opnieuw begint. Moet ik nu echt mijn hele structuur omgooien en alles async maken ofzo of is er een manier om wel mijn bestaande (minder ingewikkelde) logica te gebruiken?

Ter informatie: hier het Python bestand zoals die ik die voor VLC gemaakt heb, wat helemaal goed werkt.

Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
Fred-Erik schreef op zondag 10 mei 2015 @ 14:29:
Wat me trouwens bij een probleem bepaald in het verlengde van mijn vorige: ik gebruikte daarvoor raw_input() in Python, maar dat werkt niet hier omdat met elk binnenkomend request van de Chrome extensie de loop opnieuw begint. Moet ik nu echt mijn hele structuur omgooien en alles async maken ofzo of is er een manier om wel mijn bestaande (minder ingewikkelde) logica te gebruiken?
Volgens mij zijn background pages de juiste plaats voor je loop.

Acties:
  • 0 Henk 'm!

  • Fred-Erik
  • Registratie: Oktober 2003
  • Laatst online: 18-04 18:51
Devilly schreef op zondag 10 mei 2015 @ 14:47:
[...]


Volgens mij zijn background pages de juiste plaats voor je loop.
Dat is als je de logica in de Chrome extensie maakt ja, maar die speelt dus alleen de benodigde informatie door aan het Python script. Aangezien dit mijn eerste Javascript code was en in Python alles al werkt lijkt me dat te veel gedoe.

Acties:
  • 0 Henk 'm!

  • Devilly
  • Registratie: Januari 2009
  • Niet online
Fred-Erik schreef op zondag 10 mei 2015 @ 14:55:
[...]

Dat is als je de logica in de Chrome extensie maakt ja, maar die speelt dus alleen de benodigde informatie door aan het Python script. Aangezien dit mijn eerste Javascript code was en in Python alles al werkt lijkt me dat te veel gedoe.
Ik had je code niet bekeken, maar dacht uit je tekst op te kunnen maken dat je in de extensie een loop had die elke keer resette en dat dat niet was wat je wilde. Ik zat er klaarblijkelijk naast.

My bad!
Pagina: 1