从暴动中拔出API密钥时遇到问题

时间:2018-05-16 09:56:11

标签: json api laravel-5 api-key

嗨我在laravel 5.6上拉扯Riot Api时遇到了问题。这是一个个人项目,我不认识其他人了解Laravel。 我在Riot上被拒绝提取API密钥。

我收到此错误:

file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or 
service not known (View: 
/home/allyvoxc/ksgg.allyvox.co.za/resources/views/pages/LOL.blade.php)

突出显示的行是

$summoner = json_decode($result)->$summonerName;

这是我的代码,我在下面的代码中删除了我的API代码。

@extends('header')

@section('content')
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summoner Spy</title>
</head>
<body>
<h1>Summoner Spy</h1>
<?php
$apiKey = 'This is my API code';
$summonerName = 'lolnexus';

// get the basic summoner info
$result = 
file_get_contents('https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/' 
. $summonerName . '?api_key=' . $apiKey);
$summoner = json_decode($result)->$summonerName;
// var_dump($summoner);
?>
<h3>
<image height="64" width="64" src="http://avatar.leagueoflegends.com/na/<? 
php print $summonerName; ?>.png" valign="middle"/>
<?php print $summonerName ?>
</h3>
<div>
Level: <?php print $summoner->summonerLevel; ?>
</div>

<?php
// get that summoner's wins and losses for each game type
$result = 
file_get_contents('https://na.api.pvp.net/api/lol/na/v1.3/stats/by- 
summoner/' . $summoner->id . '/summary?api_key=' . $apiKey);
$stats = json_decode($result);
// var_dump($stats);
foreach($stats->playerStatSummaries as $statSummary){
// $statSummary->losses: sometimes losses isn't set
$losses = property_exists($statSummary, 'losses')? $statSummary->losses : 
'(not available)';
print '<p><b>' . $statSummary->playerStatSummaryType . '</b>: ' .
    $statSummary->wins . ' wins, ' . $losses . ' losses</p>';
}
?>
</body>
</html>

感谢能够提供协助的任何人

此致

1 个答案:

答案 0 :(得分:0)

我建议使用GuzzleHttp包:http://docs.guzzlephp.org/en/stable/

您的案例中的一个例子是:

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://na.api.pvp.net/api/lol/na/v1.3/stats/by-summoner/' . $summoner->id . '/summary', [
    'query' => [ 'api_key' => $apiKey ]
]);

if($res->getStatusCode() == 200) {
    $json = json_decode($res->getBody());
    $summoner = $json->$summonerName
}

此外,我不确定这是否是您的最终代码。但是你设置你的代码的方式违背了像Laravel这样的MVC框架的目的。

您应该在Controller收集所有数据,然后将这些数据传递给View

我推荐这门课程从Laravel开始:https://laracasts.com/series/laravel-from-scratch-2017

特别针对您当前案例的第5集:https://laracasts.com/series/laravel-from-scratch-2017/episodes/5