from python script to webservice

I'd like to create a very simple web service that exposes the functionality from my existing python script (attached here at the end) for use within my company...  Please provide a solution and code, not links to other info.

Basically the simplest version could be this one:
INPUT:  http://www.urladdress.com/mypythonwebservice/cc?region=global"e=goog
OUTPUT: price (523.07 for google stock last time I checked).

The script I want to provide as a service is:

# modules used in this function
import re
import sys
import os
import subprocess
import ystockquote

#download the file first
os.popen("curl -L http://www.bolsadesantiago.com/Theme/preciosacciones.aspx > precioacciones.aspx")
ticker = sys.argv[1]
ticker = str(ticker)
region = sys.argv[2]
region = str(region)

# This function takes as an input the name of a stock and region being traded,
#  and goes to the acciones.aspx OR yahoo finance to find the price...
def ticker2price(ticker, region):
  if region == "chile":
    file = open("precioacciones.aspx")
    stockstxt = file.read()
    pattern = "NEMO="+ticker+".*right\">"
    result = re.search(pattern, stockstxt)
    price = stockstxt[result.end():result.end()+30]
    price = price.split('<')[0]
    price.replace( '.', '' ).replace( ',', '.' )
    price = float( price.replace( '.', '' ).replace( ',', '.' ) )
    return price

  if region == "global":
    return ystockquote.get_price(ticker)


price = ticker2price(ticker, region)
print price

NOW INSTEAD OF PRINT WANT THIS CODE TO BE A WEBSERVICE AS SPECIFIED ABOVE.

Please help me and provide code and final answer, not links to other resources.

Thanks!
dfernanAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
defc0n1Connect With a Mentor Commented:
The easiest way to do this I can think of is to make your python script executable on your server/machine.

I assume that your are running Windows if so you can try the following:

Install python 2.5.2 as standalone - this should be no problem.

Go to the folder C:\xampp\cgi-bin\ and create a file pycgi.cgi. Paste the following code into the file and save:



      
#!C:/Python25/python.exe
# -*- coding: iso-8859-15 -*-
print "Content-Type: text/plain;charset=iso-8859-15"
print



# modules used in this function
import re
import sys
import os
import subprocess
import ystockquote

import cgi

#download the file first
os.popen("curl -L http://www.bolsadesantiago.com/Theme/preciosacciones.aspx > precioacciones.aspx")
ticker = sys.argv[1]
ticker = str(ticker)
region = sys.argv[2]
region = str(region)

region = cgi.FieldStorage()
stock = cgi.FieldStorage()


# This function takes as an input the name of a stock and region being traded,
#  and goes to the acciones.aspx OR yahoo finance to find the price...
def ticker2price(ticker, region):
  if region == "chile":
    file = open("precioacciones.aspx")
    stockstxt = file.read()
    pattern = "NEMO="+ticker+".*right\">"
    result = re.search(pattern, stockstxt)
    price = stockstxt[result.end():result.end()+30]
    price = price.split('<')[0]
    price.replace( '.', '' ).replace( ',', '.' )
    price = float( price.replace( '.', '' ).replace( ',', '.' ) )
    return price

  if region == "global":
    return ystockquote.get_price(ticker)


price = ticker2price(ticker, region)
print price

Open in new window



If this works you can start to configure apache so that it can open python files in any folder:

Create a folder "folder" in C:\xampp\htdocs\folder

Copy your pycgi.cgi to that new folder an rename it pycgi.py

Now open the apache config file C:\xampp\apache\conf\httpd.conf

Look for


      
<IfModule mime_module>
  ...
  AddHandler cgi-script .cgi
  ...
</IfModule>

Open in new window



and add
 AddHandler cgi-script .py

Open in new window


Now please restart XAMPP  - after that you should be able to call your script via http://localhost/folder/pycgi.py
0
 
dfernanAuthor Commented:
Please help me with this Q, pleaaaaase ;-)
0
 
dfernanConnect With a Mentor Author Commented:
wow great solution, thank you very much!  however, I am using a linux server, not a windows one, do you know what I need to change to make it work on a linux server?
0
 
dfernanAuthor Commented:
assumed i ma using a windows server while i explicitly mentioned I was using a unix server.
0
 
defc0n1Commented:
I am sorry I missed the followup comment. On a unix or linux  server you can do this like this:


Use your according package manager and install mod_python by typing the following into your shell:

#On debian/
sudo apt-get install libapache2-mod-python

#on fedora/centOS
sudo yum install mod_python

Open in new window


Debian/Ubuntu

Open /etc/apache2/sites-available/default (make sure to make backup of configuration file) and add:

#add either this if you want to use the Publisher Handler e.g. run python scripts directly
 <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py
                PythonHandler mod_python.publisher
                PythonDebug On
        </Directory>
#or this if you want to use the PSP Handler e.g. run python inside html
 <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .psp
                PythonHandler mod_python.psp
                PythonDebug On
        </Directory>

Open in new window


After that restart apache by typing:

# if you are using standard apache installation
/etc/init.d/httpd restart
#if you are using lampp/xampp
/opt/lampp/lampp stop
/opt/lampp/lampp start

Open in new window






Fedora/CentOS
Open /etc/httpd/conf.d/python.conf (make sure to make backup of configuration file) add:

#add either this if you want to use the Publisher Handler e.g. run python scripts directly
LoadModule python_module modules/mod_python.so

<Directory /var/www/html/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
  AddHandler mod_python .py
  PythonHandler mod_python.publisher
  PythonDebug On
</Directory>

#or this if you want to use the PSP Handler e.g. run python inside html
LoadModule python_module modules/mod_python.so

<Directory /var/www/html/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
  AddHandler mod_python .psp
  PythonHandler mod_python.psp
  PythonDebug On
</Directory>

Open in new window


After that restart apache by typing:

# if you are using standard apache installation
/etc/init.d/httpd restart
#if you are using lampp/xampp
/opt/lampp/lampp stop
/opt/lampp/lampp start

Open in new window


If you added the the first configuration using the Publisher Handler you will be able to run files ending with *.py  directly from /var/www/html/foo.py.

If you added the second configuration using PSP you can use python directly in html code called like this /var/www/html/foo.psp
0
All Courses

From novice to tech pro — start learning today.