Udostępnianie adresu URL z ciągiem zapytania na Twitterze

118

Próbuję umieścić link udostępniania Twittera w wiadomości e-mail. Ponieważ jest to wiadomość e-mail, nie mogę polegać na JavaScript i muszę użyć przycisku „Zbuduj swój własny” Tweet.

Na przykład udostępnienie łącza do Google:

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

To działa dobrze. Problem, który mam, polega na tym, że adres URL zawiera ciąg zapytania.

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

Adresy URL z ciągami zapytań mylą usługę skracania adresów URL na Twitterze, t.co. Próbowałem kodowania adresów URL na różne sposoby i nie mogę nic zrobić. Najbliżej osiągnąłem, robiąc to.

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

Tutaj zakodowałem tylko ciąg zapytania. Kiedy to robię, t.co skutecznie skraca adres URL, ale po przejściu do skróconego linku prowadzi do zakodowanego adresu URL. Widzę http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456na pasku adresu i pojawia się następujący błąd w przeglądarce

Nie znaleziono

Żądanego adresu URL /foo.htm?bar=123&baz=456 nie znaleziono na tym serwerze.

Nie wiem, jak rozwiązać ten problem.

Edycja: Re: onteria_

Próbowałem zakodować cały adres URL. Kiedy to robię, żaden adres URL nie pojawia się w tweecie.

haydenmuhl
źródło
1
Musisz zakodować URL CAŁY URL. Obejmuje to wszystko od http://dołu
onteria_

Odpowiedzi:

110

Można to rozwiązać, używając https://twitter.com/intent/tweetzamiast http://www.twitter.com/share. Korzystając z tej intent/tweetfunkcji, po prostu kodujesz cały adres URL i działa to jak urok.

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

haydenmuhl
źródło
Plume i Tweetcaster nie obsługują tego formatu (po prostu pokazują profil do zamiaru lub udostępnienia, w zależności od adresu URL). Tweetdeck w ogóle nie obsługuje adresów URL serwisu twitter.com.
Pierre-Luc Paour
Zobacz także ten link - blog.socialsourcecommons.org/2011/03/…
Alpesh Trivedi
2
https://twitter.com/intent/tweet?text={text_to_share}działa doskonale na wszystkich platformach. Szukałem tego wysoko i nisko ... Dzięki!
Jack Dewhurst
6

To nie jest prostsze niż to:

<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
źródło
4

Możesz użyć tych funkcji:

 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>
Robak PHP ...
źródło
Rozwiązanie, które nie opiera się na javascript, po prostu buduje te linki (in var url = ...) podczas generowania wiadomości e-mail.
Thomas Ebert
3

Odwołuję się do wszystkich metod.

Szybkim rozwiązaniem jest dwukrotne zakodowanie zapytania.

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
źródło
2

Nie musisz koniecznie używać zamiaru, jeśli zakodujesz swój adres URL, będzie on również działał z udostępnianiem na Twitterze.

Dragos Rusu
źródło
1

Jak wspomniał @onteria_, musisz zakodować cały parametr. Dla każdego, kto boryka się z tym samym problemem, możesz użyć poniższego bookmarkletu, aby wygenerować prawidłowo zakodowany adres URL. Skopiuj i wklej go do paska adresu przeglądarki, aby utworzyć adres URL udostępniania na Twitterze . Upewnij się, że javascript:prefiks istnieje, gdy kopiujesz go do paska adresu, Google Chrome usuwa go podczas kopiowania.

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

Źródło na JS Fiddle http://jsfiddle.net/2frkV/

Joyce Babu
źródło
1

Jeśli dodasz instrukcję na stronie html, po prostu zastąp:

&

Z

&amp;

Standardowy kod html dla &

Hans Ganteng
źródło
0

Twitter umożliwia teraz wysyłanie adresu URL za pomocą atrybutu danych. To działa świetnie dla mnie:

<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
źródło
Czy ktoś przetestował, czy opiera się to na javascript z Twittera API, aby pobrać adres URL z atrybutu, a następnie przekierować przeglądarkę na właściwy adres URL?
Mark