Condivisione di un URL con una stringa di query su Twitter


118

Sto cercando di inserire un collegamento di condivisione di Twitter in un'e-mail. Poiché questo è in un'email, non posso fare affidamento su JavaScript e devo utilizzare il pulsante Tweet "Crea il tuo".

Ad esempio, condividendo un collegamento a Google:

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

Funziona bene. Il problema che ho è quando l'URL ha una stringa di query.

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

Gli URL con stringhe di query confondono il servizio di accorciamento degli URL di Twitter, t.co. Ho provato a codificare l'URL in vari modi e non riesco a far funzionare nulla. Il più vicino che ho ottenuto è in questo modo.

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

Qui ho codificato solo la stringa di query. Quando lo faccio, t.co accorcia con successo l'URL, ma dopo aver seguito il collegamento abbreviato, ti porta all'URL codificato. Vedo http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456nella barra degli indirizzi e ricevo il seguente errore nel browser

Non trovato

L'URL richiesto /foo.htm?bar=123&baz=456 non è stato trovato su questo server.

Non so come risolvere questo problema.

Modifica: Re: onteria_

Ho provato a codificare l'intero URL. Quando lo faccio non compare alcun URL nel Tweet.


1
Devi codificare l'URL dell'INTERO URL. Ciò include tutto dal http://basso
onteria_

Risposte:



110

Questo può essere risolto usando https://twitter.com/intent/tweetinvece di http://www.twitter.com/share. Utilizzando la intent/tweetfunzione, codifichi semplicemente l'URL dell'intero URL e funziona a meraviglia.

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


Plume e Tweetcaster non gestiscono questo formato (mostrano solo il profilo per intento o condivisione, a seconda dell'URL). Tweetdeck sembra non gestire affatto gli URL di twitter.com.
Pierre-Luc Paour


2
https://twitter.com/intent/tweet?text={text_to_share}funziona perfettamente su tutte le piattaforme. Ho cercato in alto e in basso per questo .. Grazie!
Jack Dewhurst


6

Non è più semplice di così:

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

4

Puoi usare queste funzioni:

 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>

Una soluzione che non si basa su javascript creerebbe semplicemente questi collegamenti (in var url = ...) durante la generazione dell'email.
Thomas Ebert


3

Faccio riferimento a tutti i metodi.

Codificare la query due volte è la soluzione rapida.

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


const twitterSharingURL=`https://twitter.com/intent/tweet?&url=${url}`

2

Non devi necessariamente usare l'intento, se codifichi il tuo URL funzionerà anche con la condivisione di Twitter.


1

Come menzionato da @onteria_, è necessario codificare l'intero parametro. Per chiunque altro debba affrontare lo stesso problema, è possibile utilizzare il seguente bookmarklet per generare l'URL correttamente codificato. Copia e incolla nella barra degli indirizzi del browser per creare l' URL di condivisione di Twitter . Assicurati che il javascript:prefisso sia presente quando lo copi nella barra degli indirizzi, Google Chrome lo rimuove durante la copia.

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))})();

Fonte su JS Fiddle http://jsfiddle.net/2frkV/


1

Se lo aggiungi manualmente sul sito html, sostituisci semplicemente:

&

Con

&amp;

Codice html standard per &


0

Twitter ora ti consente di inviare l'URL tramite un attributo di dati. Questo funziona alla grande per me:

<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>

Qualcuno ha testato per vedere se questo si basa su javascript dall'API di Twitter per estrarre l'URL dall'attributo e quindi reindirizzare il browser all'URL corretto?
Marco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.