Compartir una URL con una cadena de consulta en Twitter

118

Estoy intentando poner un enlace para compartir de Twitter en un correo electrónico. Como esto está en un correo electrónico, no puedo confiar en JavaScript y tengo que usar el botón "Crea tu propio" Tweet.

Por ejemplo, compartir un enlace a Google:

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

Esto funciona bien. El problema que tengo es cuando la URL tiene una cadena de consulta.

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

Las URL con cadenas de consulta confunden el servicio de acortamiento de URL de Twitter, t.co. Probé la codificación de URL de varias maneras y no puedo hacer que nada funcione. Lo más cerca que he estado es haciendo esto.

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

Aquí he codificado solo la cadena de consulta. Cuando hago esto, t.co acorta correctamente la URL, pero al seguir el enlace abreviado, lo lleva a la URL codificada. Veo http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456en la barra de direcciones y obtengo el siguiente error en el navegador

Extraviado

La URL solicitada /foo.htm?bar=123&baz=456 no se encontró en este servidor.

No sé cómo resolver este problema.

Editar: Re: onteria_

Intenté codificar la URL completa. Cuando hago eso, no aparece ninguna URL en el Tweet.

Haydenmuhl
fuente
1
Debe codificar la URL COMPLETA. Eso incluye todo desde http://abajo
onteria_

Respuestas:

110

Esto se puede resolver usando en https://twitter.com/intent/tweetlugar de http://www.twitter.com/share. Con la intent/tweetfunción, simplemente codifica la URL completa y funciona como un encanto.

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

Haydenmuhl
fuente
Plume y Tweetcaster no manejan este formato (solo muestran el perfil para intención o compartir, dependiendo de la URL). Tweetdeck no parece manejar las URL de twitter.com en absoluto.
Pierre-Luc Paour
También vea este enlace - blog.socialsourcecommons.org/2011/03/…
Alpesh Trivedi
2
https://twitter.com/intent/tweet?text={text_to_share}funciona perfectamente en todas las plataformas. He estado buscando por todas partes para esto .. ¡Gracias!
Jack Dewhurst
6

No hay nada más simple que esto:

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

Puede utilizar estas funciones:

 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>
Gusano PHP ...
fuente
Una solución que no dependa de javascript simplemente crearía estos enlaces (en var url = ...) al generar el correo electrónico.
Thomas Ebert
3

Hago referencia a todos los métodos.

Codificar la consulta dos veces es la solución rápida.

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

No es necesario que uses intent, si codificas tu URL, también funcionará con twitter share.

Dragos Rusu
fuente
1

Como mencionó @onteria_, debe codificar todo el parámetro. Para cualquier otra persona que se enfrente al mismo problema, puede usar el siguiente marcador para generar la URL codificada correctamente. Copie y péguelo en la barra de direcciones de su navegador para crear la URL para compartir de Twitter . Asegúrese de que el javascript:prefijo esté allí cuando lo copie en la barra de direcciones, Google Chrome lo elimina al copiar.

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

Fuente en JS Fiddle http://jsfiddle.net/2frkV/

Joyce Babu
fuente
1

Si lo agrega de forma manual en el sitio html, simplemente reemplace:

&

Con

&amp;

Código html estándar para &

Hans Ganteng
fuente
0

Twitter ahora te permite enviar la URL a través de un atributo de datos. Esto funciona muy bien para mí:

<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>
usuario3798322
fuente
¿Alguien ha probado para ver si esto se basa en javascript de la API de Twitter para extraer la URL del atributo y luego redirigir el navegador a la URL correcta?
Mark