Partager une URL avec une chaîne de requête sur Twitter

118

J'essaye de mettre un lien de partage Twitter dans un e-mail. Comme il s'agit d'un e-mail, je ne peux pas me fier à JavaScript et je dois utiliser le bouton "Créer votre propre" Tweet.

Par exemple, partager un lien vers Google:

<a href="http://www.twitter.com/share?url=http://www.google.com/>Tweet</a>

Cela fonctionne très bien. Le problème que je rencontre est lorsque l'URL contient une chaîne de requête.

<a href="http://www.twitter.com/share?url=http://mysite.org/foo.htm?bar=123&baz=456">Tweet</a>

Les URL avec des chaînes de requête confondent le service de raccourcissement d'URL de Twitter, t.co. J'ai essayé l'encodage URL de différentes manières et je ne peux rien faire fonctionner. Le plus proche que j'ai obtenu est en faisant cela.

<a href="http://www.twitter.com/share?url=http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456">Tweet</a>

Ici, je n'ai encodé que la chaîne de requête. Lorsque je fais cela, t.co raccourcit l'URL avec succès, mais en suivant le lien raccourci, il vous amène à l'URL codée. Je vois http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456dans la barre d'adresse et j'obtiens l'erreur suivante dans le navigateur

Pas trouvé

L'URL demandée /foo.htm?bar=123&baz=456 est introuvable sur ce serveur.

Je ne sais pas comment résoudre ce problème.

Edit: Re: onteria_

J'ai essayé d'encoder l'URL entière. Lorsque je fais cela, aucune URL n'apparaît dans le Tweet.

Haydenmuhl
la source
1
Vous devez encoder l'URL ENTIER. Cela comprend tout du http://bas
onteria_

Réponses:

110

Cela peut être résolu en utilisant https://twitter.com/intent/tweetau lieu de http://www.twitter.com/share. En utilisant la intent/tweetfonction, vous encodez simplement votre URL entière et cela fonctionne comme un charme.

https://dev.twitter.com/web/intents

Haydenmuhl
la source
Plume et Tweetcaster ne gèrent pas ce format (ils affichent simplement le profil pour l'intention ou le partage, en fonction de l'URL). Tweetdeck ne semble pas du tout gérer les URL de twitter.com.
Pierre-Luc Paour
Voir aussi ce lien - blog.socialsourcecommons.org/2011/03/…
Alpesh Trivedi
2
https://twitter.com/intent/tweet?text={text_to_share}fonctionne parfaitement sur toutes les plateformes. Je cherchais haut et bas pour ça ... Merci!
Jack Dewhurst le
6

Ça ne devient pas plus simple que ça:

<a href="https://twitter.com/intent/tweet?text=optional%20promo%20text%20http://example.com/foo.htm?bar=123&baz=456" target="_blank">Tweet</a>
Ronen Rabinovici
la source
4

Vous pouvez utiliser ces fonctions:

 function shareOnFB(){
       var url = "https://www.facebook.com/sharer/sharer.php?u=https://yoururl.com&t=your message";
       window.open(url, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600');
       return false;
  }


function shareOntwitter(){
    var url = 'https://twitter.com/intent/tweet?url=URL_HERE&via=getboldify&text=yourtext';
    TwitterWindow = window.open(url, 'TwitterWindow',width=600,height=300);
    return false;
 }


function shareOnGoogle(){
     var url = "https://plus.google.com/share?url=https://yoururl.com";
     window.open(url, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=350,width=480');
     return false;
}


<a onClick="shareOnFB()"> Facebook </a>
<a onClick="shareOntwitter()"> Twitter </a>
<a onClick="shareOnGoogle()"> Google </a>
Ver PHP ...
la source
Une solution qui ne repose pas sur javascript ne ferait que créer ces liens (in var url = ...) lors de la génération de l'e-mail.
Thomas Ebert
3

Je référence toutes les méthodes.

Encoder la requête deux fois est la solution rapide.

const query = a=123&b=456;
const url = `https://example.com/test?${encodeURIComponent(encodeURIComponent(query),)}`;


const twitterSharingURL=`https://twitter.com/intent/tweet?&url=${url}`
Dana Chen
la source
2

Vous n'avez pas nécessairement besoin d'utiliser l'intention, si vous encodez votre URL, cela fonctionnera également avec le partage Twitter.

Dragos Rusu
la source
1

Comme @onteria_ l'a mentionné, vous devez encoder l'intégralité du paramètre. Pour toute autre personne confrontée au même problème, vous pouvez utiliser le bookmarklet suivant pour générer l'URL correctement codée. Copiez-collez-le dans la barre d'adresse de votre navigateur pour créer l' url de partage Twitter . Assurez-vous que le javascript:préfixe est présent lorsque vous le copiez dans la barre d'adresse, Google Chrome le supprime lors de la copie.

javascript:(function(){var url=prompt("Enter the url to share");if(url)prompt("Share the following url - ","http://www.twitter.com/share?url="+encodeURIComponent(url))})();

Source sur JS Fiddle http://jsfiddle.net/2frkV/

Joyce Babu
la source
1

Si vous l'ajoutez manuel sur le site html, remplacez simplement:

&

Avec

&amp;

Code html standard pour &

Hans Ganteng
la source
0

Twitter vous permet désormais d'envoyer l'URL via un attribut de données. Cela fonctionne très bien pour moi:

<a href="javascript:;" class="twitter-share-button" data-lang="en" data-text="check out link b" data-url="http://www.lyricvideos.org/tracks?videoURL=SX05JZ4FisE">Tweet</a>
user3798322
la source
Quelqu'un a-t-il testé pour voir si cela s'appuie sur javascript de l'API Twitter pour extraire l'URL de l'attribut, puis rediriger le navigateur vers la bonne URL?
Marquez le