yahoo-finance étant HS, récup des cours par scrapping
This commit is contained in:
@@ -32,6 +32,18 @@
|
|||||||
data-fv-stringlength-message="15 caractères maximum" />
|
data-fv-stringlength-message="15 caractères maximum" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-2 control-label">Libellé</label>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<input class="form-control" type="text" name="libelle"
|
||||||
|
value="${actif.libelle}" placeholder="45 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="Le libellé est obligatoire"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="45"
|
||||||
|
data-fv-stringlength-message="45 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-2" for="nombre">Nombre</label>
|
<label class="control-label col-xs-2" for="nombre">Nombre</label>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
@@ -40,6 +52,15 @@
|
|||||||
data-fv-digits-message="Le nombre doit être composé que de chiffres" />
|
data-fv-digits-message="Le nombre doit être composé que de chiffres" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2">Devise</label>
|
||||||
|
<div class="col-xs-3">
|
||||||
|
<select class="form-control" name="devise">
|
||||||
|
<option value="EUR" tal:attributes="selected actif.devise == 'EUR' and 'selected' or None">EUR</option>
|
||||||
|
<option value="USD" tal:attributes="selected actif.devise == 'USD' and 'selected' or None">USD</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-2" for="pru">PRU</label>
|
<label class="control-label col-xs-2" for="pru">PRU</label>
|
||||||
<div class="col-xs-2">
|
<div class="col-xs-2">
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ from pyramid_mailer import get_mailer
|
|||||||
from pyramid_mailer.message import Message, Attachment
|
from pyramid_mailer.message import Message, Attachment
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import hashlib
|
import hashlib
|
||||||
from yahoo_finance import Share, Currency
|
|
||||||
|
|
||||||
from sqlalchemy.exc import DBAPIError
|
from sqlalchemy.exc import DBAPIError
|
||||||
from ..security import groupfinder
|
from ..security import groupfinder
|
||||||
@@ -37,6 +36,38 @@ from ..views.default import (
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
import urllib2
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
def getYahooQuote(ticker):
|
||||||
|
# specify the url
|
||||||
|
quote_page = 'https://finance.yahoo.com/quote/%s/history/' % ticker
|
||||||
|
|
||||||
|
# query & parse the html using beautiful soap and store in variable `soup`
|
||||||
|
soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser')
|
||||||
|
data = []
|
||||||
|
# get the quote price
|
||||||
|
rows = soup.findAll('table')[0].tbody.findAll('tr')
|
||||||
|
for each_row in rows:
|
||||||
|
divs = each_row.findAll('td')
|
||||||
|
if divs[1].span.text != 'Dividend': #Ignore this row in the table
|
||||||
|
#I'm only interested in 'Close' price;
|
||||||
|
data.append({'Date': divs[0].span.text, 'Close': float(divs[5].span.text.replace(',',''))})
|
||||||
|
# retourne la prière ligne
|
||||||
|
return data[0]
|
||||||
|
|
||||||
|
def getCurrencyRate(currency):
|
||||||
|
# specify the url
|
||||||
|
quote_page = 'http://www.finances.net/devises/courseuro'
|
||||||
|
|
||||||
|
# query & parse the html using beautiful soap and store in variable `soup`
|
||||||
|
soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser')
|
||||||
|
# get the history table
|
||||||
|
rows = soup.find('table', attrs={'class': 'news_table'}).tbody.findAll('tr')
|
||||||
|
divs = rows[1].findAll('td')
|
||||||
|
rate = divs[1].span.text
|
||||||
|
return float(rate.replace(',','.'))
|
||||||
|
|
||||||
|
|
||||||
@view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view')
|
@view_config(route_name='actifs_list', renderer='../templates/actifs/actifs_list.pt', permission='view')
|
||||||
def actifs_list(request):
|
def actifs_list(request):
|
||||||
@@ -51,14 +82,14 @@ def actifs_list(request):
|
|||||||
# MAJ du prtefeuille
|
# MAJ du prtefeuille
|
||||||
if 'form.submitted' in request.params:
|
if 'form.submitted' in request.params:
|
||||||
# maj des parités des devises d'après Yahoo finance
|
# maj des parités des devises d'après Yahoo finance
|
||||||
usdeur = Currency('USDEUR')
|
update_actif_devise(request, 'USD', getCurrencyRate('USD'))
|
||||||
update_actif_devise(request, 'USD', usdeur.get_rate())
|
|
||||||
|
|
||||||
for item in items:
|
for item in items:
|
||||||
if item.type == 'ACTION':
|
if item.type == 'ACTION':
|
||||||
sym = Share(item.symbole)
|
# get yahoo price
|
||||||
# import pdb;pdb.set_trace()
|
quote_price = getYahooQuote(item.symbole)
|
||||||
update_actif_valeur(request, item.symbole, sym.get_price())
|
if quote_price:
|
||||||
|
update_actif_valeur(request, item.symbole, quote_price['Close'])
|
||||||
time.sleep(2) # attendre 2 secondes
|
time.sleep(2) # attendre 2 secondes
|
||||||
|
|
||||||
# update du portefeuille
|
# update du portefeuille
|
||||||
@@ -123,13 +154,10 @@ def actif_edit(request):
|
|||||||
symbole = request.params['symbole']
|
symbole = request.params['symbole']
|
||||||
else:
|
else:
|
||||||
symbole = actif.symbole
|
symbole = actif.symbole
|
||||||
sym = Share(symbole)
|
|
||||||
|
|
||||||
if sym.get_name() <> None:
|
quote_price = getYahooQuote(symbole)
|
||||||
# import pdb;pdb.set_trace()
|
if quote_price:
|
||||||
new_values['libelle'] = sym.get_name()
|
new_values['cours'] = quote_price['Close']
|
||||||
new_values['cours'] = sym.get_price()
|
|
||||||
new_values['devise'] = sym.get_currency()
|
|
||||||
|
|
||||||
update_actif(request, no_id, new_values)
|
update_actif(request, no_id, new_values)
|
||||||
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
|
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ from pyramid_mailer.message import Message, Attachment
|
|||||||
from datetime import *
|
from datetime import *
|
||||||
import hashlib
|
import hashlib
|
||||||
from docutils.core import publish_parts
|
from docutils.core import publish_parts
|
||||||
from yahoo_finance import Share, Currency
|
|
||||||
|
|
||||||
from sqlalchemy.exc import DBAPIError
|
from sqlalchemy.exc import DBAPIError
|
||||||
from ..security import groupfinder
|
from ..security import groupfinder
|
||||||
|
|||||||
Reference in New Issue
Block a user