Difference between revisions of "Importing fund or stock prices from an OFX file"

From GnuCash
Jump to: navigation, search
(Created page with 'How to Import Fund or Stock Prices From an OFX File The attached python script show how to import prices from an OFX file. I borrowed heavily from work done by Peter Holtermann…')
 
Line 1: Line 1:
 
How to Import Fund or Stock Prices From an OFX File
 
How to Import Fund or Stock Prices From an OFX File
  
The attached python script show how to import prices from an OFX file.  I borrowed heavily from work done by Peter Holtermann ([[get_prices]]and others (price_database_example.py in src/optional/python-bindings/example_scripts).  The read from OFX tool has only been tested on files from 1 source, so be wary.  
+
The attached python script show how to import prices from an OFX file.  I borrowed heavily from work done by [http://wiki.gnucash.org/wiki/Stocks/get_prices Peter Holtermann] and others (price_database_example.py in src/optional/python-bindings/example_scripts).  The read from OFX tool has only been tested on files from 1 source, so be wary.  
  
[[File:getPrices.py]]
+
<pre>
 +
#!/usr/bin/python
 +
# usage: getPrices ofxfile outfile
 +
# Read an OFX w/ an INVPOS aggregate and write the prices
 +
# to a CSV file
 +
 
 +
# Brad Haack 2011-01-25
 +
 
 +
import sys
 +
 
 +
fp = open(sys.argv[1])
 +
fout = open(sys.argv[2],'w')
 +
 
 +
flines = fp.readlines()
 +
 
 +
inlist=0
 +
inpos=0
 +
id = 0
 +
unqid=[]
 +
price=[]
 +
date=[]
 +
 
 +
for line in flines:
 +
    line = line.rstrip('\n')
 +
    wd = line.split('>')
 +
    for id in range(len(wd)):
 +
        wi = wd[id]
 +
        if wi == '<INVPOSLIST': # now we're in the list
 +
            inlist = 1
 +
        if inlist :
 +
            if wi == '<INVPOS': # now we're in the pos info aggregate
 +
                inpos = 1
 +
                unqid.append(0)
 +
                price.append(0)
 +
                date.append(0)
 +
            if inpos :
 +
                if wi == '<UNIQUEID' :
 +
                    unqid[id] = wd[id+1]
 +
                if wi == '<UNITPRICE' :
 +
                    price[id] = wd[id+1]
 +
                if wi == '<DTPRICEASOF' :
 +
                    date[id] = wd[id+1]
 +
            if wi == '</INVPOS': # now we're out of the pos info aggregate
 +
                inpos = 0
 +
                str = '%s, %s, %s\n' % (unqid[id], date[id], price[id])
 +
                fout.write( str)
 +
           
 +
        if wi == '\INVPOSLIST>': # now we're not in the list
 +
            inlist=0
 +
       
 +
<\pre>

Revision as of 15:29, 26 January 2011

How to Import Fund or Stock Prices From an OFX File

The attached python script show how to import prices from an OFX file. I borrowed heavily from work done by Peter Holtermann and others (price_database_example.py in src/optional/python-bindings/example_scripts). The read from OFX tool has only been tested on files from 1 source, so be wary.

#!/usr/bin/python
# usage: getPrices ofxfile outfile
# Read an OFX w/ an INVPOS aggregate and write the prices
# to a CSV file

# Brad Haack 2011-01-25

import sys

fp = open(sys.argv[1])
fout = open(sys.argv[2],'w')

flines = fp.readlines()

inlist=0
inpos=0
id = 0
unqid=[]
price=[]
date=[]

for line in flines:
    line = line.rstrip('\n')
    wd = line.split('>')
    for id in range(len(wd)):
        wi = wd[id]
        if wi == '<INVPOSLIST': # now we're in the list
            inlist = 1
        if inlist :
            if wi == '<INVPOS': # now we're in the pos info aggregate
                inpos = 1
                unqid.append(0)
                price.append(0)
                date.append(0)
            if inpos :
                if wi == '<UNIQUEID' :
                    unqid[id] = wd[id+1]
                if wi == '<UNITPRICE' :
                    price[id] = wd[id+1]
                if wi == '<DTPRICEASOF' :
                    date[id] = wd[id+1]
            if wi == '</INVPOS': # now we're out of the pos info aggregate
                inpos = 0
                str = '%s, %s, %s\n' % (unqid[id], date[id], price[id])
                fout.write( str)
            
        if wi == '\INVPOSLIST>': # now we're not in the list
            inlist=0
        
<\pre>