Совместное использование URL-адреса со строкой запроса в Twitter

119

Я пытаюсь разместить ссылку для публикации в Твиттере в электронном письме. Поскольку это электронное письмо, я не могу полагаться на JavaScript и вынужден использовать кнопку «Создать свой собственный твит».

Например, поделившись ссылкой на Google:

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

Это прекрасно работает. У меня проблема, когда в URL-адресе есть строка запроса.

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

URL-адреса со строками запроса сбивают с толку службу сокращения URL-адресов Twitter, t.co. Я пробовал кодировать URL-адрес разными способами и не могу заставить ничего работать. Самое близкое, что я получил, - это сделать это.

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

Здесь я закодировал только строку запроса. Когда я это делаю, t.co успешно сокращает URL-адрес, но после перехода по сокращенной ссылке вы попадаете на закодированный URL-адрес. Я вижу http://mysite.org/foo.htm%3Fbar%3D123%26baz%3D456в адресной строке и получаю следующую ошибку в браузере

не обнаружена

Запрошенный URL /foo.htm?bar=123&baz=456 не найден на этом сервере.

Я не понимаю, как решить эту проблему.

Изменить: Re: onteria_

Я пробовал кодировать весь URL. Когда я это делаю, в твите не отображается URL.

haydenmuhl
источник
1
Вам необходимо закодировать ВЕСЬ URL. Это включает в себя все, начиная с самого http://низа
onteria_ 01

Ответы:

173

Это сработает для вас

http://twitter.com/share?text=text goes here&url=http://url goes here&hashtags=hashtag1,hashtag2,hashtag3

Вот живой пример об этом


http://twitter.com/share?text=Im Совместное использование в Твиттере & url = https: //stackoverflow.com/users/2943186/youssef-subehi&hashtags=stackoverflow,example,youssefusf

Юсеф Субехи
источник
Было бы хорошим ответом, если бы он… ну… отвечал на исходный вопрос.
Дэйв Лэнд
110

Это можно решить, используя https://twitter.com/intent/tweetвместо http://www.twitter.com/share. Используя эту intent/tweetфункцию, вы просто URL-адрес кодируете весь свой URL-адрес, и это работает как шарм.

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

haydenmuhl
источник
Plume и Tweetcaster не поддерживают этот формат (они просто показывают профиль для намерения или совместного использования, в зависимости от URL-адреса). Tweetdeck, похоже, вообще не обрабатывает URL-адреса twitter.com.
Пьер-Люк Паур, 01
См. Также эту ссылку - blog.socialsourcecommons.org/2011/03/…
Альпеш Триведи
2
https://twitter.com/intent/tweet?text={text_to_share}отлично работает на всех платформах. Долго искал это ... Спасибо!
Джек Дьюхерст
6

Нет ничего проще:

<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

Вы можете использовать эти функции:

 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>
PHP-червь ...
источник
Решение, которое не полагается на javascript, просто построит эти ссылки (в var url = ...) при создании электронного письма.
Томас Эберт
3

Ссылаюсь на все методы.

Закодировать запрос дважды - быстрое решение.

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

Вам не обязательно использовать намерение, если вы закодируете свой URL-адрес, он также будет работать с общим доступом в Twitter.

Драгош Русу
источник
1

Как упоминалось в @onteria_, вам необходимо закодировать весь параметр. Для всех, кто сталкивается с той же проблемой, вы можете использовать следующий букмарклет для создания правильно закодированного URL-адреса. Скопируйте и вставьте его в адресную строку браузера, чтобы создать URL- адрес общего доступа в Twitter . Убедитесь, что javascript:префикс есть, когда вы копируете его в адресную строку, Google Chrome удаляет его при копировании.

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

Источник на JS Fiddle http://jsfiddle.net/2frkV/

Джойс Бабу
источник
1

Если вы добавляете руководство на html-сайт, просто замените:

&

С участием

&amp;

Стандартный html-код для &

Ханс Гантенг
источник
0

Twitter теперь позволяет отправлять URL-адрес через атрибут данных. Это отлично работает для меня:

<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
источник
Кто-нибудь тестировал, чтобы увидеть, полагается ли это на javascript из Twitter API, чтобы вытащить URL-адрес из атрибута, а затем перенаправить браузер на правильный URL-адрес?
Марк