Programmation questions

If you made a script you can offer it to the others here, or ask help to improve it. You can also report here bugs & problems with existing scripts.
Post Reply
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Programmation questions

Post by antp »

This topic is for those that are making scripts and want to quickly ask a technical question, beginners or not.
e.g. "how do I convert a text to number", "is there a function that does...", etc.

Ce sujet est pour ceux qui font des scripts et veulent poser une question technique rapide, débutants ou non.
par ex. "comment convertir du texte en nombre", "est-ce qu'il y a une fonction qui...", etc.
Scorpio
Posts: 4
Joined: 2007-11-12 13:58:12

Post by Scorpio »

Merci mais le mieux serais un tuto avec exemple pour aider.
Car pour débuter vaut mieux ça :)
merci

Aucun script de séries existe et c'est bien dommage.
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Ouais mais bon j'ai pas vraiment le temps de faire un tuto :D La création de ce topic c'était pour que ceux qui tentent de créer des scripts n'aiment pas peur de poser des questions de base.
draco31.fr
Posts: 191
Joined: 2005-08-11 19:27:15
Location: Toulouse (31), France

Post by draco31.fr »

Bonjour Antoine et autres programmeurs Delphi ^^

Peux-tu m'éclairer sur les paramètres à fournir pour la fonction PostPage ou PostPage2 ?
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Ce qui est dans l'aide est relativement explicite, non ?

Code: Select all

function PostPage(address: string; params: string): string;
Télécharge une page HTML (ou autre fichier texte) via la méthode POST et la retourne sous forme de chaîne. Les paramètres doivent être encodés par la fonction URLEncode.

Code: Select all

function PostPage2(address: string; params: string; content: string; referer: string; forceHTTP11: Boolean; forceEncodeParams: Boolean): string; 
Idem que PostPage, mais permet de spécifier en plus le content-type (au lieu de 'application/x-www-form-urlencoded'), donner une adresse de "referer", forcer l'utilisation de HTTP 1.1 (au lieu de 1.0) et demander à la fonction d'encoder elle-même les paramètres.
Sur quel point faut-il plus d'infos ?
Pour le format des paramètres, c'est comme pour GetPage : variable1=valeur1&variable2=valeur2&etc...
mais il faut encoder la chaîne avec UrlEncode avant de la passer à la fonction

Code: Select all

page := PostPage('http://www.site.com/', UrlEncode('variable1=valeur1&variable2=valeur2'));
draco31.fr
Posts: 191
Joined: 2005-08-11 19:27:15
Location: Toulouse (31), France

Post by draco31.fr »

Ben "params" avec comme description : "Les paramètres doivent être encodés par la fonction URLEncode", ça ne renseigne pas exactement sur la nature des paramètres ; mais avec l'exemple on comprends mieux.

Moi je testais des trucs du genre :

Code: Select all

page := PostPage('http://www.site.com/index.php?variable1=valeur1&variable2=valeur2', UrlEncode('monparametre ??'));
Forcément ça marchait pas. :p
En tout cas merci pour l'exemple !!!
Sinon, comment savoir si il vaut mieux utiliser la méthode Post ou la méthode Get pour une page donnée ?

Et sinon, tu aurais un exemple d'utilisation du PostPage2 ? (avec content et referer notament ?)
Perso, je ne connais rien au protocole HTTP donc ces notions ne me "parlent" pas !
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

A priori il n'y a pas de "il vaut mieux" : c'est l'un ou l'autre, on n'a pas le choix.
Ça dépend de comment a été fait le site. Il y a un <form... method="AAA"> sur la page de recherche du site, le AAA étant soit POST soit GET.
Le referer c'est juste l'URL de la page de recherche, pour que le site croie que la recherche vient de chez lui.

Les paramètres de postpage2 c'est vraiment pour quand on doit aller dans le détail, si un site n'accepte pas le postpage à cause d'une configuration un peu particulière.
Content c'est la description du contenu mais je ne sais pas vraiment ce qu'on peut vouloir mettre d'autre. Comme dit dans l'aide par défaut c'est "application/x-www-form-urlencoded", je suppose que dans certains cas extrèmes des sites auraient besoin d'autre chose :??:
ForceHTTP11 c'est pour utiliser la version 1.1 du protocole pour faire le POST, vu qu'en général c'est la 1.0 qui est utilisée pour ça semle-t-il (alors que la 1.1 sert pour le reste).
ForceEncodeParams mis à True c'est pour ne pas devoir faire l'UrlEncode avant.
Ces trucs n'ont pas spécialement d'intérêt, j'avais juste rajouté la fonction avec tous les paramètres possibles, parce qu'un jour on rencontré un site un peu récalcitrant.
draco31.fr
Posts: 191
Joined: 2005-08-11 19:27:15
Location: Toulouse (31), France

Post by draco31.fr »

antp wrote:A priori il n'y a pas de "il vaut mieux" : c'est l'un ou l'autre, on n'a pas le choix.
Ça dépend de comment a été fait le site. Il y a un <form... method="AAA"> sur la page de recherche du site, le AAA étant soit POST soit GET.
ça c'est une info importante !!!
ça evite de galerer avec la mauvaise méthode !
Zoynels
Posts: 4
Joined: 2008-03-28 01:45:22

Post by Zoynels »

I have question. How can I ADD new Movie by script? Is it possible? I want to create fully automatic script, which should get all movies from page.
bad4u
Posts: 1148
Joined: 2006-12-11 22:54:46

Post by bad4u »

Zoynels wrote:I have question. How can I ADD new Movie by script? Is it possible? I want to create fully automatic script, which should get all movies from page.
As far as I know it is not possible to add multiple movies at once.

But there might be a trick: It should be possible to import all movie data from this page to a text file, that follows amcs' XML file format. So you should be able to import all films to your catalog, but you would need to import cover pictures in a second step then (that could be done automatically if you have a given URL for every film).

It might be even simplier if you only save title and URL to XML file and fetch all other data later .. eventually you could use or modify an existing script for this then.
Zoynels
Posts: 4
Joined: 2008-03-28 01:45:22

Post by Zoynels »

to bad4u
Thank you for your answer. I thought about this way of solving problem.
draco31.fr
Posts: 191
Joined: 2005-08-11 19:27:15
Location: Toulouse (31), France

Post by draco31.fr »

Bonjour Antoine.

Depuis peu j'ai migré sur Linux et bien évidemment je me suis étonné du peu d'avancement des différents projets de portage d'AMC vers cet OS (xAMC, MovieFly...).
Le principal problème semble venir du moteur de script.

Peux-tu nous expliquer dans quelle mesure il serait possible de réutiliser le moteur de script existant sur un autre système (linux) ou dans un autre langage de programmation (je pense à une importation dans une appli en Ruby par exemple).
Au pire, est-ce qu'il serait facile de le ré-écrire en totalité ?

Bref, raconte-nous comme tu as créé ce moteur que tout le monde t'envie !!
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Le moteur de script ce n'est pas moi qui l'ai fait, j'ai utilisé un truc tout fait ;)
A priori ça n'est pas facile à réutiliser du fait que ce soit fait en Delphi et non en C. Une solution c'est de tenter de compiler le moteur de script dans un programme/module fait avec Kylix ou FreePascal/Lazarus pour ensuite l'utiliser dans un projet fait avec un langage quelconque. L'autre solution étant de réécrire un moteur de script, mais bon, c'est du boulot.
emarc
Posts: 4
Joined: 2008-09-26 19:28:01

Post by emarc »

Le gros problème de ces ports (xAMC et MovieFly) c'est que apparentement ils utilisent un autre langage : Python.

Mais on peut faire le port sans changer presque le code, en compilant avec Lazarus dans la place de Delphi. Il y à déjà des moteurs d'script pour Lazarus en Linux.

http://wiki.lazarus.freepascal.org/inde ... cal_Script

Il faut seulement changer les controls qui ne soient pas présents dans Lazarus (basiquement les third-party controls) pour des standard Delphi/Lazarus controls.
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

supprimer des "espaces"

Post by Raoul_Volfoni »

j'ai un problème :/
Je récupère une valeur entre 2 balises comme par exemple :

Code: Select all

<td colspan="3">

				Academy of Motion Picture Arts and Sciences (Oscars)            </td>
Jusque là pas de soucis, sauf que je me retrouve dans l'impossibilité de supprimer ce qui semble être des espaces, tabulations ou retour à la ligne, mais qui n'en sont pas. Ce qui fait que je me retrouve, après nettoyage des balises, avec une valeur string de type :

Code: Select all

|
				Academy of Motion Picture Arts and Sciences (Oscars)            |
(les traits sont là pour montrer ce que je récupère dans le champ d'AMC)

J'ai tout essayé pour supprimer ces "espaces". StringReplace de plusieurs Caractères spéciaux, Fonction Trim etc ... Rien n'y fait. Donc impossible de formater le texte comme je veux.
Dans l'éditeur de script lorsqu'on visualise la chaine, ces "espaces" apparaissent sous la forme de carrés.
Une idée pour supprimer ces "trucs" ?
bad4u
Posts: 1148
Joined: 2006-12-11 22:54:46

Post by bad4u »

I guess you are talking about allmovie.com ;)

I did a short test using

Code: Select all

program NewScript;

uses
stringutils1;

var
page, value: string;

begin
page := GetPage('http://www.allmovie.com/work/transformers-322407/awards');
value := textbetween(page, '<td colspan="3">', '</td>');
value := StringReplace(value, #9, '');
value := StringReplace(value, #10, '');
value := StringReplace(value, #13, '');
value := FullTrim(value);
setfield(fielddescription, value);
end.
and it works for me. But maybe it's different for other movies, so please give an example movie if it still does not work using these StringReplace settings. Take care that you have latest StringUtils1 version, as there was a minor update on FullTrim function last month, although still named v.6 ;)
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

The stringreplaces are maybe not useful, as FullTrim already check for these characters.
Except if you also want to remove theses values when they appear in the middle of the text, of course.
bad4u
Posts: 1148
Joined: 2006-12-11 22:54:46

Post by bad4u »

Yep, I added FullTrim only to delete some spaces at the end of the string. And as awards might be a list, there are special characters inside the text, too. But main reason for StringReplaces was just to show which ones I used to get rid of the characters ;)
Raoul_Volfoni
Posts: 863
Joined: 2006-08-31 23:58:18

Post by Raoul_Volfoni »

Hello bad4u

You guess right about allmovie !! ;)

This FullTrim function is amazing :clapping:
I didn't know, there was such "awesome" function ... shame on me.
Now i know how to delete each one of these characteres ... I learn everyday.
It's going to be very helpful to debug the "award" part of the All Movie Guide script.

Thanks a lot bad4u :grinking: You are good4us :hihi:

I made the updating of StringUtils1.pas ... thanks for that too.
boyerf
Posts: 46
Joined: 2009-07-20 18:24:33

Utilisation d'un tsearchrec

Post by boyerf »

Bonjour,
Est il possible d'utiliser dans les scripts un tsearchrec ?
Il ne le reconnait pas et je ne trouve pas de doc sur les fonctions disponibles dans le moteur de script.

A+
FB
Post Reply