Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

έχω ένα url σε python(www.server.com/select=q?) και παίρνω κάποια arguments από το χρήστη και θέλω να φτιάξω το τελικό url, έχω βρει αυτο

http://stackoverflow.com/questions/2506379/add-params-to-given-url-in-python

 

γενικά οι απαντήσεις με καλύπτουνε αλλά επειδή το hardcoded είναι πάντα εύκολο ειδικα αυτο ειναι ωραιο

params = {'lang':'en','tag':'python'}

Αλλα εγω πως μπορω να το υλοποιησω παίρνοντας parameters

python example.py id=123 cat=2

 

Δημοσ.

https://docs.python.org/2/library/urllib.html

 

urllib.urlencode(query[, doseq])

Convert a mapping object or a sequence of two-element tuples to a “percent-encoded” string, suitable to pass to urlopen() above as the optional data argument. This is useful to pass a dictionary of form fields to a POST request. The resulting string is a series of key=value pairs separated by '&' characters, where both key and value are quoted using quote_plus() above. When a sequence of two-element tuples is used as the query argument, the first element of each tuple is a key and the second is a value. The value element in itself can be a sequence and in that case, if the optional parameter doseq is evaluates to True, individual key=value pairs separated by '&' are generated for each element of the value sequence for the key. The order of parameters in the encoded string will match the order of parameter tuples in the sequence. The urlparse module provides the functions parse_qs() and parse_qsl() which are used to parse query strings into Python data structures.

 

Πρέπει να φτιάξεις μια ακολουθία απο tuples με τα ονόματα και τις τιμές λογικά αυτό μπορεί να γίνει δυναμικά με παραμέτρους περισσότερες πληροφορίες στο documentation της python για την έκδοση που χρησιμοποιείς. Δεν χρησιμοποιώ python οπότε δεν γνωρίζω πως ακριβώς το κάνεις.

Δημοσ.

Νομίζω ότι ρωτάς το λάθος πράγμα, ή ίσως πιο σωστά, ρωτάς μόνο το ένα από τα δύο πράγματα που σε απασχολούν.

 

1. Για να διαβάσεις τα command line arguments χρησιμοποιησε τη βιβλιοθήκη που αναφέρει το δεύτερο link που έδωσες (argparse)

2. Για να περάσεις query parameters χρησιμοποιήσε αυτό https://docs.python.org/3/library/urllib.parse.html#urllib.parse.parse_qs(ή το αντίστοιχο API της Python 2)

Δημοσ.

Για οποιοδήποτε πρόγραμμα με command line interface (CLI) μακράν ότι καλύτερο έχω βρεί: docopt "pip install docopt"

Γράφεις ένα σωστό docstring για την εφαρμογή σου και το CLI σου έρχεται δώρο.

Δημοσ.

Καταρχας ευχαριστώ για τις απαντήσεις σας. Ειμαι limited σε συγκεκριμενη python version και συγκεκριμενες βιβλιοθηκες. Αντι για argparse χρησιμοποιώ το optparse(μικρό το κακο αυτη την στιγμή), διαβάζω κανονικά τα options και χτίζω το query string μου.

Oπότε μετα μου αρκεί να κάνω encode το string μου σε url και να ανοιξω ενα connection.

 

H αλλη λυση ειναι να κανω

conn = urllib.urlopen(url, params)

url έχω οκ αλλά τα params πρέπει να ειναι της μορφης(2o post)

http://stackoverflow.com/questions/13288930/how-to-pass-parameter-to-url-with-python-urlopen

 

Είναι δυνατό να φτιάξω έτσι τα parameters ετσι δεχομενος τα μεσω command line?

Δημοσ.
parser.add_option("-H", "--host", dest="host", help="Search a specific host")
parser.add_option("-p", "--program", dest="program", help="Search for a specific program")

options, arguments = parser.parse_args()
option_dict = vars(options)
str =''

for keys, values in option_dict.items():
     if values is not None:
          str += keys +':'+ values + ' '


final = urlparse.urljoin(url, str)

Οπου url ειναι το link πριν το query string.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...