0


0

ユーザーが何を入力しても、常に適切なURLを返しますか?

私は次のPythonコードを持っています

from urlparse import urlparse

def clean_url(url):
    new_url = urlparse(url)
    if new_url.netloc == '':
        return new_url.path.strip().decode()
    else:
        return new_url.netloc.strip().decode()

print clean_url("http://www.facebook.com/john.doe")
print clean_url("http://facebook.com/john.doe")
print clean_url("facebook.com/john.doe")
print clean_url("www.facebook.com/john.doe")
print clean_url("john.doe")

各例では、文字列を取得して返します。 これは私が欲しいものではありません。 それぞれの例を取り上げて、「www。*」または「john.doe」と入力しただけでも、常に「http://www.facebook.com/john.doe」を返すようにしています。

私はプログラミングが初めてなので、優しくしてください。

3 Answer


1


私はこの答えがパーティーに少し遅れていることを知っていますが、これがあなたがやろうとしていることとまったく同じなら、私は少し異なるアプローチをお勧めします。 FacebookのURLを正規化するための車輪を再発明するのではなく、GoogleがSocial Graph APIで使用するために既に行った作業の使用を検討してください。

彼らはすでにfacebookを含む多くの同様のサイトのパターンを実装しています。 詳細についてはこちらをご覧ください。


0


import urlparse
p = urlparse.urlsplit("john.doe")


=> ('','','john.doe','','')

タプルの最初の要素は「http://」、タプルの2番目の要素は「www.facebook.com/」で、タプルの4番目と5番目の要素はそのままにしておくことができます。 その後、URLを処理した後に再構築できます。

ちょうど参考までに、「john.doe」の安全なURLセグメントを確保するには(これはfacebookには当てはまらないかもしれませんが、知っておくと良いルールです)urllib.quote(string)を使用して空白などを適切にエスケープします。


0


あなたが尋ねたことを理解したかどうかはわかりませんが、このコードを試すことができます。テストして正常に動作しますが、これに問題がある場合はお知らせください。

私はそれが役立つと思います

! / usr / bin / env python

urlparseをインポート

def clean_url(url):

url_list = []
# split values into tuple
url_tuple = urlparse.urlsplit(url)

# as tuples are immutable so take this to a list
# so we can change the values that we need
counter = 0
for element in url_tuple:
    url_list.append(element)

# validate each element individually
url_list[0] = 'http'
url_list[1] = 'www.facebook.com'

# get user name from the original url
# ** I understood the user is the only value
# for sure in the url, right??
user = url.split('/')
if len(user) == 1:
    # the user was the only value sent
    url_list[2] = user[0]
else:
    # get the last element of the list
    url_list[2] = user[len(user)-1]

# convert the list into a tuple and
# get all the elements together in the url again
new_url = urlparse.urlunsplit(tuple(url_list))

return new_url

if * name * == '* main *':print clean_url( "http://www.facebook.com/john.doe")print clean_url( "http://facebook.com/john.doe")print clean_url ( "facebook.com/john.doe")print clean_url( "www.facebook.com/john.doe")print clean_url( "john.doe")