2011-02-15 5 views
0

私は異なるサイトのアフィリエイトリンクを持っているDjangoプロジェクトをやっています。だから私は、アフィリエイトリンクのアロートは、それが自己ではなく第三者からのものになるため、リダイレクトをすべて実行した後に最終的なドメインがどこになるのかを自動的に判断できるようにしたい。たとえば、アフィリエイトリンクは次のようになります。Python、Django、またはシェルベースのツールでリダイレクトを行った後に、最終的なURLを取得するにはどうすればよいですか?

http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate  

ただし、amazon.comにリダイレクトされる可能性があります。 すべてのリダイレクトが終わった後にどこで終了するかを私に知らせることができるPython(またはLinuxの外部ユーティリティ)には何かがありますか?

ありがとうございます!

答えて

3

デフォルトでは、urllib2.urlopen()がリダイレクトに続きます。応答にはgeturl()メソッドがあり、実際に終了した場所のアドレスが返されます。 the documentationを参照してください。

+0

うーん、そのためのおかげで、それはヘッダをリダイレクト送るページに働くかもしれないが、アフィリエイトで動作するように表示されませんでした私が試したページ。 wgetで取得したソースを見ると、メタhttp-equiv = "refresh"タグを使用していることがわかります。それを稼働させる方法はありますか? – UserZer0

1

このようなチェックを実行するためのカスタムツールは必要ありません。基本的なシェルutilsのに十分である:

curl -s --head --location 'http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate'|grep '^Location'|tail -n 1

上記リダイレクトのすべてに従い、最終目的地である最後Locationヘッダを抽出します。

+0

このコマンドからの出力はありません。おそらく私は他の答えのコメントで言ったのと同じことをするでしょう。確かに – UserZer0

+0

。正直言って、メタタグを使ってリダイレクトするのはあまりにも不自由なので、ほとんど表現できません。とにかく、この状況では、出力HTMLを解析してそのデータにアクセスする必要があります。 –

0

また、FancyURLopener(http://docs.python.org/library/urllib.html#urllib.FancyURLopener)を試してみてください。ほとんどのリダイレクトケースを処理します。サブクラスurlopenerとしてgeturl()を使用できます。だから、あなたは簡単に言うことができる:

fancy = urllib.FancyURLopener({}) 
link = fancy.open('http://some/affiliate/link') 
final_link = link.geturl() 

は私にとって素晴らしい作品:)

関連する問題