【问题标题】:Fetching content from external website从外部网站获取内容
【发布时间】:2013-04-21 13:41:39
【问题描述】:

假设我想从德国交易所bitcoin.de 提取当前比特币汇率(欧元),并且每次访问我的网站时都会获取该值(因此没有缓存)。我能够在 PHP 中提取值:

// fetch contents from bitcoin.de
$url = 'https://www.bitcoin.de/de/';
$content = file_get_contents($url);

// cut everything before specified text
$content = strstr($content, "Aktueller Bitcoin Kurs");

// extract rate
$rate = strstr($content, "<b>");
$rate = substr($rate, 3);
$rate = strstr($rate, "€", true);

echo $rate . " EUR"; // e.g. 105,51 EUR

这可以正常工作并打印正确的当前值,因为它可以在 bitcoin.de 网站上找到。但我正在获取整个网站内容,减去我不需要的所有内容,然后返回。

我的问题:有没有办法(也许也使用 jQuery)来更有效地解决这个问题;因此不获取整个站点代码,而只获取速率值?

【问题讨论】:

  • 他们提供API吗?
  • 不,我不这么认为。
  • 如果你想实时执行它很难使用 php,jquery 。尝试找到更好的 API \

标签: php jquery file-get-contents


【解决方案1】:

您可以将maxlen 参数与file_get_contents() 一起使用。通过这种方式,您可以限制函数将读取多少个字符。您还可以根据需要在服务器上缓存结果(本地存储)。在你的位置,我只会缓存结果,这将带来大部分性能。

【讨论】:

  • 这听起来很有希望。我编辑了我的问题,以明确明确不需要缓存。
  • 我知道这种数据一定是新鲜的,但是即使缓存很短的时间,也能有很大的性能提升。
  • 好的,我认为费率每 15 或 30 分钟更新一次。我想在这种情况下缓存已经有意义了?你有什么建议?
  • 如果您特别需要此页面的数据,即使缓存每 1 秒也比为每个用户发出请求要好。但正如有人指出的那样,最好的方法是使用 API。
  • 取决于你有什么可用的。最快的是 redis、mangodb 或任何其他内存数据结构。但是我觉得这里的读写速度没那么重要,所以sql或者文件系统就好了。这里更重要的是,您不会为每个用户都提出请求。
【解决方案2】:

有许多 API 可用于访问该数据。虽然有更复杂的 API,但您要查找的信息可在

http://data.mtgox.com/api/2/BTCUSD/money/ticker

【讨论】:

  • 哦 - 对不起,我错过了整个欧元的事情。 data.mtgox.com/api/2/BTCEUR/money/ticker
  • 是的,美元并没有真正有用,因为我必须使用货币转换器 API。但是 Mt.Gox EUR API 很棒!谢谢。
  • 太棒了!我不知道您的确切需求是什么(更新率、多次交换等),但正如我所说,在用户和开发人员级别都有许多可用于比特币数据的 API。以下是一些链接: 贸易信息:bitcoincharts.com/about/markets-api 技术信息:blockexplorer.com/q
  • 顺便说一句:我接受这个作为答案,尽管它不能满足我从 bitcoin.de 获取这个值的要求。但由于这个 Mt.Gox API 非常好用且易于使用,我选择使用 Mt.Gox。
  • 是的,我正在考虑这个问题。 bitcoincharts api 有来自 bitcoin.de 的数据可供您使用。不幸的是,bitcoin.de 不提供 api(公开,但它必须有一个 somewhere 与 bitcoincharts.com 交互)。另一种选择是使用api.bitcoincharts.com/v1/trades.csv?symbol=btcdeEUR。这将为您提供 bitcoin.de 上 csv 格式的最新交易。您可以在api.bitcoincharts.com/v1/markets.json 以 JSON 对象的形式获取所有市场的结果(如果更可取)
【解决方案3】:

【讨论】:

  • 这会在多大程度上更有效率?这不是也获取整个网站内容并挑选出需要的内容吗?
  • 每次抓取都需要一次将全部内容作为 html 字符串。并从抓取的数据中解析数据。至少,您一次需要全部数据。
  • 好的,我明白了,所以如果没有可用的 API,我将不得不获取整个站点并提取我需要的内容。感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多