Convertir une url relative en url absolue

Convertir une url relative en url absolue - C++ - Programmation

Marsh Posté le 09-04-2010 à 17:02:06    

Bonjour,
 
J'ai une page internet que je scanne et j'obtiens par conséquent les liens qu'elle comporte via d'autres pages.
 
Certains de ces liens sont relatifs.
 
y aurait-il un moyen de les convertir en liens absolus, sachant que je dispose bien entendu de l'adresse de la page sur laquelle j'ai trouvé le lien ?
 
Merci d'avance :)
 
nc
 
PS : google ne m'a pas été d'une grande aide :(

Reply

Marsh Posté le 09-04-2010 à 17:02:06   

Reply

Marsh Posté le 09-04-2010 à 17:21:25    

Salut

 

Comment sont stockés tes liens, quel OS utilises-tu?


Message édité par ptitchep le 09-04-2010 à 17:22:05

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 09-04-2010 à 18:01:44    

alors mes liens sont dans des "string", et j'utilise linux


---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 09-04-2010 à 23:22:25    

Des lien relatifs c'est ça:
 
lien "père" :
http://adresse.lalala.pouet.com
 
lien "relatif":
images/carotte.jpg
 
?
 
Si c'est le cas et que tu as
std::string pere, relatif, absolu;
 
tu dois pouvoir faire
absolu = pere+ "/" + relatif;
 
et tu obtiens
absolu == "http://adresse.lalala.pouet.com/images/carotte.jpg
 
Si tu as besoin repérer des sous chaines dans tes strings, tu as des méthodes comme find, substr. etc...
http://www.cplusplus.com/reference/string/string/
 
Pour décomposer ta chaîne, par exemple chaque partie entre deux slash /, boost::tokenizer je pense.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 09-04-2010 à 23:34:35    

ca semble simple effectivement, mais ca l'est beaucoup moins
 
Imagine par exemple que j'ai l'adresse suivante :
?page=http://www.google.fr#paragraphe1 lorsque j'appelle la page www.monsite.com/undossier
 
tu vois bien que ta méthode ne donne pas le bon lien relatif


---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 10-04-2010 à 09:04:34    

Heu il y a quoi qui ne vas pas dans ce que ptitchep t'as donné?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-04-2010 à 10:32:19    

pardon, ce que tu avais dit était effectivement correct, j'avais mal lu
 
Le problème est surtout de récupérer le dossier père :
par exemple il semble difficile de se baser sur un / du fait que lorsque l'on appelle la page www.monsite.com/undossier alors le dossier père est www.monsite.com/undossier  
De même il peut être difficile de se baser sur les points, parce que l'on pourrait avoir
www.monsite.com/un.dossier/
 
Donc le problème revient à trouver une méthode efficace pour trouver le dossier père


---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 10-04-2010 à 11:39:33    

Si t'as un truc genre
 
www.monsite/undossier/page.php?....
C'est facile, tu te repères par rapport au dernier /


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-04-2010 à 11:47:03    

et si j'ai un truc du genre www.monsite.com/undossier ?


---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 10-04-2010 à 12:04:57    

Non mais attend,  tu veux bien nous noter les URL que tu risques de rencontrer, et le résultat que tu voudrais obtenir pour chaque URL?
Parce que j'ai l'impression que c'est pas totalement clair pour toi (ou du moins, c'est l'impression que tu donnes)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-04-2010 à 12:04:57   

Reply

Marsh Posté le 10-04-2010 à 12:19:51    

www.monsite.com/undossier -> dossier parent = www.monsite.com/undossier/
 
www.monsite.com/undossier/ -> dossier parent = www.monsite.com/undossier/
 
www.monsite.com/mapage.htm -> dossier parent = www.monsite.com/
 
www.monsite.com/un.dossier -> dossier parent = www.monsite.com/un.dossier/
 
www.monsite.com/un.dossier?page=1 -> dossier parent = www.monsite.com/un.dossier/
...


Message édité par nisalon_caje le 10-04-2010 à 12:22:21

---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 10-04-2010 à 13:29:56    

C'est loin d'être génial vu que c'est fait en 2-2 mais ça trouve le dossier parent de tes exemples:

Code :
  1. #include <iostream>
  2. #include <string>
  3. std::string trouverParent(const std::string& chemin)
  4. {
  5.         size_t pos;
  6.         if (chemin.find_last_of('/') == chemin.size()-1)
  7.                 return chemin;
  8.         pos = chemin.find_first_of('?');
  9.         if (pos != std::string::npos)
  10.                 return chemin.substr(0,pos)+"/";
  11.         pos = chemin.find(".htm" );
  12.         if (pos != std::string::npos)
  13.         {
  14.                 size_t posslash = chemin.find_last_of("/", pos);
  15.                 return chemin.substr(0,posslash+1);
  16.         }
  17.         return chemin+"/";
  18. }
  19. int main ()
  20. {
  21.         std::cerr<<trouverParent("www.monsite.com/undossier" )<<std::endl;
  22.         std::cerr<<trouverParent("www.monsite.com/undossier/" )<<std::endl;
  23.         std::cerr<<trouverParent("www.monsite.com/lalala/mapage.htm" )<<std::endl;
  24.         std::cerr<<trouverParent("www.monsite.com/un.dossier" )<<std::endl;
  25.         std::cerr<<trouverParent("www.monsite.com/un.dossier?page=1" )<<std::endl;
  26.         return 0;
  27. }


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 10-04-2010 à 13:30:08    

mmm...
Là comme ça, je te dirai qu'à moins que tu fasses une liste des exentions de fichier, tu ne pourras pas..

 

Ne serait-ce que pour la raison que
www.monsite.com/un.dossier?page=1
Pourrait tout aussi bien être équivalent à

 

www.monsite.com/index.php?page=1 , pour lequel tu t'attendrais plutôt à avoir www.monsite.com/ comme dossier parent.

 

Edit: Oui mais ptitchep, tu "triches" parce que tu cherches .htm dans le path. Donc comme je l'ai dit : Si tu as une liste des extensions (.php, .xml, .jpg ,...) alors ça joue, sinon ça ne marchera pas

Message cité 1 fois
Message édité par esox_ch le 10-04-2010 à 13:32:08

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-04-2010 à 14:19:49    

esox_ch a écrit :


Edit: Oui mais ptitchep, tu "triches" parce que tu cherches .htm dans le path. Donc comme je l'ai dit : Si tu as une liste des extensions (.php, .xml, .jpg ,...) alors ça joue, sinon ça ne marchera pas


Oui en effet, j'ai fait ça vite fait. On peut en effet faire une liste d'extensions, un iterateur dessus etc. De toute façon mon exemple ne marche que pour 1% des cas mais je ne suis pas là pour faire son travail. Je donne un exemple.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 10-04-2010 à 14:28:16    

Tout à fait, je répondais juste déjà à la question :
Esox, pourquoi est-ce que tu es si défaitiste que ça, alors que ptitchep a résolu le problème :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed