Twitterでクエリ文字列とURLを共有する


117

Twitter共有リンクをメールに入れようとしています。これはメールに含まれているため、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は、TwitterのURL短縮サービス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が表示されません。


1
URL全体をURLエンコードする必要があります。それにはhttp://下からすべてが含まれます
オンテリア_

回答:



110

これは、のhttps://twitter.com/intent/tweet代わりに使用することで解決できますhttp://www.twitter.com/share。このintent/tweet関数を使用すると、URL全体をURLエンコードするだけで、魅力的に機能します。

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


PlumeとTweetcasterはこの形式を処理しません(URLに応じて、意図または共有のプロファイルを表示するだけです)。Tweetdeckはtwitter.comのURLをまったく処理しないようです。
Pierre-Luc Paour

また、このリンクを参照してください
-blog.socialsourcecommons.org/2011/03/…– Alpesh Trivedi

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>

JavaScriptに依存しないソリューションはvar url = ...、電子メールの生成時にこれらのリンクを(で)構築するだけです。
Thomas Ebert


3

すべてのメソッドを参照します。

クエリを2回エンコードするのが高速なソリューションです。

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を生成できます。ブラウザのアドレスバーにコピーして貼り付け、Twitter共有URLを作成します。javascript:プレフィックスをアドレスバーにコピーするときにプレフィックスが存在することを確認してください。GoogleChromeではコピー時にプレフィックスが削除されます。

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>

これがTwitter APIのJavaScriptに依存しているかどうかをテストして、属性からURLをプルし、ブラウザを正しいURLにリダイレクトすることをテストしたことがありますか?
マーク

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.