2016-07-02 10 views
0

私は私の会社のためにWeb上に展開したいpythonスクリプトの作成を終えたばかりですが、残念なことにその方法を知りません。誰かが私を助けることができたら、それは大いに感謝されるでしょう。私はDjangoとFlaskを見てきましたが、十分に理解できないようです。Web上で動作するPythonスクリプトを追加しますか?

私のスクリプトは何:

  • は、テキストファイルからアドレスを読み込み、ジオコードが
  • 戻り値は、アドレスアドレス+
  • きれいに

保ちながら、私は、ウェブ上でこれを取得したいと思いますそれは非常に簡単です。私が必要とするのは、ユーザーがテキストファイルを選択できるボタン、またはユーザーが自分のアドレスに貼り付けることができるテキストボックスがあることだけです。それ以外は何もありません。その後、スクリプトは、それが何らかの形で出力洗浄アドレスを(直接、ページ上または多分ファイルとして?)

マイコード意志アドレスの処理を完了したとき:あなたが必要なもの

from geopy.geocoders import Bing 
from geopy.exc import GeocoderTimedOut 
import re 
geolocator = Bing('API KEY') 

failCount = 0 
successCount = 0 

def cleanAddress(address): 
    global failCount 
    global successCount 

    patterns = [" st", "street", "ave", "avenue", "plz", "ctr", "park", "pl", " plaza ", "way", "grn", "sq", "ln","dr", "ct", "oval", "vlg", "blvd", "boulevard", " ter", "pkwy", "rd", "row", "hwy", "americas", "broadway"] 

    address = address.lower().split('\n')[0] 
    address = re.sub('[^A-Za-z0-9]+', ' ', address).lstrip() 
    address = re.sub(re.compile(r'^[^0-9]*'), '', address).lstrip() 
    if 'plz' in address: 
     address = address.replace('plz', 'plaza ', 1) 
    if 'hstreet' in address: 
     address = address.replace('hstreet', 'h street') 
    if 'dstreet' in address: 
     address = address.replace('dstreet', 'd street') 
    if 'hst' in address: 
     address = address.replace('hst', 'h st') 
    if 'dst' in address: 
     address = address.replace('dst', 'd st') 
    if 'have' in address: 
     address = address.replace('have', 'h ave') 
    if 'dave' in address: 
     address = address.replace('dave', 'd ave') 
    if 'havenue' in address: 
     address = address.replace('havenue', 'h avenue') 
    if 'davenue' in address: 
     address = address.replace('davenue', 'd avenue') 
    regex = r'(.*)(' + '|'.join(patterns) + r')(.*)' 
    #print(re.sub(regex, r'\1\2', address).lstrip()) 
    address = re.sub(regex, r'\1\2', address).lstrip() + " nyc" 

    try: 
     clean = geolocator.geocode(address) 
     x = clean.address 
     address, city, zipcode, country = x.split(",") 
     address = address.lower() 
     if 'first' in address: 
      address = address.replace('first', '1st') 
     elif 'second' in address: 
      address = address.replace('second', '2nd') 
     elif 'third' in address: 
      address = address.replace('third', '3rd') 
     elif 'fourth' in address: 
      address = address.replace('fourth', '4th') 
     elif 'fifth' in address: 
      address = address.replace('fifth', '5th') 
     elif ' sixth a' in address: 
      address = address.replace('ave', '') 
      address = address.replace('avenue', '') 
      address = address.replace(' sixth', ' avenue of the americas') 
     elif ' 6th a' in address: 
      address = address.replace('ave', '') 
      address = address.replace('avenue', '') 
      address = address.replace(' 6th', ' avenue of the americas') 
     elif 'seventh' in address: 
      address = address.replace('seventh', '7th') 
     elif 'fashion' in address: 
      address = address.replace('fashion', '7th') 
     elif 'eighth' in address: 
      address = address.replace('eighth', '8th') 
     elif 'ninth' in address: 
      address = address.replace('ninth', '9th') 
     elif 'tenth' in address: 
      address = address.replace('tenth', '10th') 
     elif 'eleventh' in address: 
      address = address.replace('eleventh', '11th') 
     zipcode = zipcode[3:] 
     print(str(address) + ", "+ str(zipcode.lstrip()) + ", " + str(clean.latitude) + ", " + str(clean.longitude)) 
     successCount += 1 
     #print(str(address)) 
    except AttributeError: 
     print('Can not be cleaned') 
     failCount += 1 
    except ValueError: 
     print('Can not be cleaned') 
     failCount += 1 
    except GeocoderTimedOut as e: 
     print('Can not be cleaned')  
     failCount += 1 


def main(): 

    f = open('address.txt') 
    for line in f: 
     address = line 
     cleanAddress(address) 

    f.close() 
    global failCount 
    global successCount 
    total = float(failCount + successCount) 
    successRate = float(successCount/total) * 100 
    print("Success rate: " + str(successRate) + "%") 

if __name__ == '__main__': 
    main() 
+0

FlaskまたはDjangoを試してください。基礎を学ぶ。それから、あなたのコードを小さな断片で追加します。あなたが求めているのは不明確で広すぎる –

+0

あなたが必要とするのは、これを行うために誰かに支払うことです。 – Jeff

+0

申し訳ありませんが、私は明確ではない。私はあなたが正しいクリケットだと思う。私はFlaskかDjangoのいずれかを学ぶ時間を過ごすつもりです。他のものより「容易」か、それとも好みになるのでしょうか? – Harrison

答えて

2

はフラスコです。

あなたのスクリプトの肉を取って、Flaskがあなたの会社のウェブサイト上の指定されたURLにアクセスしたときに呼び出す関数をラップする必要があります。それはエラーが含まれていてもよいので、私はこのコードをデバッグしていないが、あなたのアイデアを取得します:すべてのその後

from flask import Flask 
from myscript import clearAddress 

app = Flask("myaddresscleanerapp") 

@app.route("/"): 
    return """<form action=\"/processit\" method=\"post\">Address<br><input type=\"text\" name=\"cooladdress\"><br> 
    <input type=\"submit\" value=\"Submit\"></form> 
    """ 

@app.route("/processit", methods=['POST']) 
def dothing(): 
    address = request.form['cooladdress'] 
    return cleanAddress(address) # calling your function and returning the results as plain text 

を、スクリプトから、または直接コマンド - から(このようなあなたのWebアプリケーションのサービスを開始する必要がありますライン端子):

export FLASK_APP=addresscleanerweb.py # or what ever you name your python file 
flask run --host=0.0.0.0 

あなたのWebアプリを実行しているだろう、今、あなたは、人々がyourcompanywebsite.comにアクセスしてアプリを使用することができますので、あなたのアプリがリッスンしているポートをサーバー上のプロキシでトラフィックをリダイレクトする必要があります、 例えば。

+0

コメントありがとうございました。私はそれを考え出した。今は1つのアドレスで動作します。ユーザーがテキストボックスにすべてのアドレスを入力できるように、どのように追加することができますか? – Harrison

+0

'cooladdress'の入力タイプを[' textbox'](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#Example)に変更する必要があります。 (ユーザーが1行に1つのアドレスを入力した場合)、各行をコードが処理できる反復可能なリストに分割する 'clearAddress'関数を変更する必要があります。 – shackra

+0

ここに私が今現在持っているものがあります:http://pastebin.com/eej1TEde それはすべてのアドレスを通して繰り返しません。それは私が入力する最初のアドレスを処理するだけです。 – Harrison

関連する問題