@sirocco
Инженер АСУТП

Как парсить курс валют и записывать в БД?

Помогите дописать код. Нужно парсить курсы криптовалют и дату\время с сервера, на которую был действителен курс, и записывать в MySQL, раз в минуту. В дальнейшем буду разбираться как строить график по этим данным из БД.
С парсером разобрался, вот он:
<?php
$btc = json_decode(file_get_contents('https://btc-e.com/api/2/btc_rur/ticker/'), true); 
$ticker = $btc['ticker']; 
$ticker['avg'];
echo "Продать: ".$ticker['sell']." Руб.";
echo '</b> <br>';
echo "Купить : ".$ticker['buy']." Руб.";
echo '</b> <br>';
echo '<b><font color=" #00CC33" size="3">Обновлено: <font color="#00CC33">';

$timestamp = $ticker['updated'];
echo strftime('%H:%M:%S',$timestamp);

?>

А вот дальше застрял, не могу разобраться как с этой БД работать. Вообще много чего из-за этого застряло, парсю кучу данных с ардуино, а как в базу их записывать незнаю. Помогите, пожалуйста.
P.S. Это нужно сделать на php.
  • Вопрос задан
  • 5812 просмотров
Решения вопроса 1
@sirocco Автор вопроса
Инженер АСУТП
Допёр с Вашей помощью, товарищи. СПАСИБО. Вот оно, решение:
<?php

$file='btc_status.lock';
if(!flock($lock_file = fopen($file, 'w'), LOCK_EX | LOCK_NB))
  die("Already runninng\n");
  
include 'config_db.php';
include 'safemysql.class.php';
$db = new SafeMysql();

$fl=json_decode(file_get_contents("https://btc-e.com/api/3/ticker/btc_usd-ltc_usd?ignore_invalid=1"));

$btc=$fl->btc_usd;

if($btc->last>0)
	{
	//$sql = "INSERT INTO kurs SET mark = 'btce', date=NOW(), ?u"; // Для чего это?
	$db->query("INSERT INTO kurs (mark, sell) VALUES ('btce',{$btc->sell})");
	}
mysql_close();
?>

Вроде работает. Надеюсь с точки зрения безопасности и эстетики тоже всё верно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
@sonik_spb
Как вариант я сделал иначе: поставил мунин и дописал к нему плагин. Очень хорошо выходит =)
Ответ написан
winbackgo
@winbackgo
Как парсить курс валют и записывать в БД?

пойти учить php, sql...
Ответ написан
Наверное нужно подключить mysql и писать в нее полученные от парсера результаты?
Вы как я понимаю совсем не знаете ни php ни mysql?
Вот вам пример моего парсера btc/ltc.
<?php

$file='btc_status.lock';
if(!flock($lock_file = fopen($file, 'w'), LOCK_EX | LOCK_NB))
  die("Already runninng\n");

include("config.php");
mysql_query("SET names utf8");

$fl=json_decode(file_get_contents("https://btc-e.com/api/3/ticker/btc_usd-ltc_usd?ignore_invalid=1"));

//print_r($fl);
$btc=$fl->btc_usd;
$ltc=$fl->ltc_usd;
$timestamp=time();
if($btc->last>0)
{
mysql_query("INSERT INTO btc_charts_live (mark, date, low, high, buy, sell, volume, last) VALUES ('btce',$timestamp,{$btc->low},{$btc->high},{$btc->buy},{$btc->sell},{$btc->vol},{$btc->last})");
}
if($ltc->last>0)
{
mysql_query("INSERT INTO ltc_charts_live (mark, date, low, high, buy, sell, volume, last) VALUES ('btce',$timestamp,{$ltc->low},{$ltc->high},{$ltc->buy},{$ltc->sell},{$ltc->vol},{$ltc->last})");
}


mysql_close();
Ответ написан
@FanatPHP
Чебуратор тега PHP
если не трудно, приведите свой пример.

include 'safemysql.class.php';
$db = new safeMysql();
$sql = "INSERT INTO btc_charts_live SET mark = 'btce', date=NOW(), ?u";
$db->query("INSERT INTO btc_charts_live SET ?u", $btc);

Хотя, чтобы понять, как это работает и почему важно делать только так, а не иначе, даже начальных знаний недостаточно, даже не говоря об отсутствии знаний вообще.
Ответ написан
@sirocco Автор вопроса
Инженер АСУТП
Ничего не получается.
<?php

$file='btc_status.lock';
if(!flock($lock_file = fopen($file, 'w'), LOCK_EX | LOCK_NB))
  die("Already runninng\n");
  
include("config_db.php");
include 'safemysql.class.php';
$db = new SafeMysql();

$fl=json_decode(file_get_contents("https://btc-e.com/api/3/ticker/btc_usd-ltc_usd?ignore_invalid=1"));

$btc=$fl->btc_usd;
if($btc->last>0)
	{
	$sql = "INSERT INTO kurs SET mark = 'btce', date=NOW(), ?u";
	$db->query->("INSERT INTO kurs SET ?u", $btc);
	}
mysql_close();
?>

safemysql.class.php скачал...
Вылетает ошибка: Parse error: syntax error, unexpected '(', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /volume1/web/0test/12.php on line 17
Строка 17 это
$db->query->("INSERT INTO kurs SET ?u", $btc);
Что с синтаксисом не так?

Пробовал так изменить:
.......
if($btc->last>0)
	{
	$sql = "INSERT INTO kurs SET mark = 'btce', date=NOW(), ?u";
	$result = $db->query("kurs");
		while ($row = $db->fetch($result))
		{   
    	echo $row['name'];
		}
	}
mysql_close();

Тогда такую ошибку даёт: Fatal error: SafeMySQL: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'kurs' at line 1. Full query: [kurs]. Error initiated in /volume1/web/0test/12.php on line 17, thrown in /volume1/web/0test/safemysql.class.php on line 601
Строка 17:
$result = $db->query("kurs");
Строка 601 в файле safemysql.class.php:
trigger_error($err,E_USER_ERROR);
Что нужно исправить?
Таблица в БД называется "kurs", поля - mark, date, sell.
Ответ написан
Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...
А как-нибудь иначе, например прям из брокерского терминала не проще брать котировки? Многие дают с радостью, только попроси.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы