Demo

Probiere ClanSphere aus und teste daran herum. Demo


Antworten: 12
Seite [1]
ev0lution


Geekboy





Beiträge: 1103
# Thema - 19.07.2011 um 18:49 Uhr
Hallo Com,

ich möchte auf meiner Seite eine statische Seite einrichten in der ich die Rankings von unseren Mitgliedern anzeigen lasse kann.

http://api.nfs-s.com/api/nfsw?players=1APRIL,TWMTOPT&fields=all,grimg&dev=1

die Daten (andere Spielernamen, ist nur Beispiel) möchte ich auslesen. Bzw nur den Namen und die Platzierung.
Ich weiss aber so gar nichts damit anzufangen
man sagte mri noch das wenn man das "dev=1" weglässt, man JSON Daten erhielte was für mich ebenfalls bömische Wälder sind. Das was ich googlen konnte übersteigt mein Horizont.

Kann mir jmd sagen wie ich das realisieren kann ?


------------------
Inaktiv
cbw.lava


Rock the board





Beiträge: 63
# Antwort: 1 - 19.07.2011 um 18:58 Uhr
Mithilfe eines JSON-Parsers (dazu aber den &dev=1 Parameter in der URL weglassen). Du müßtest dich halt entscheiden, ob du das ganze in PHP oder JavaScript per AJAX realisieren willst. Ich persönlich würde zu AJAX tendieren, da so die Verarbeitung auf dem Client läuft, was den Webserver entlastet.


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 2 - 19.07.2011 um 19:28 Uhr
ok ich möchte dann javascript ^^


------------------


Inaktiv
|
cbw.lava


Rock the board





Beiträge: 63
# Antwort: 3 - 19.07.2011 um 19:50 Uhr
Na dann mal los. Hab nie gesagt ich würde dir die Arbeit abnehmen


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 4 - 20.07.2011 um 11:11 Uhr
Hab ich auch nicht erwartet aber zumindest mal einen Ansatz oder sowas.


------------------


Inaktiv
|
cbw.lava


Rock the board





Beiträge: 63
# Antwort: 5 - 20.07.2011 um 11:50 Uhr
Eventuell schau ichs mir mal an, weil ich mir vorstellen könnte das mir der Code ebenfalls nützlich ist. BTW ein reiner AJAX-Ansatz wie ich ursprünglich gesagt hatte ist nicht möglich, hab vergessen dass die API-Seite ja nicht auf deinem Server läuft (und aus Sicherheitsgründen gibt es bei Browsern Same Origin Policies) D.h. es wird zumindest einen Wrapper in PHP geben, der die Daten von der obigen URL holt und evtl. cached. Na mal schaun...


Inaktiv
|
cbw.lava


Rock the board





Beiträge: 63
# Antwort: 6 - 22.07.2011 um 21:42 Uhr
So, hier mal ein Ansatz (rein PHP):

Code zeigen +-
 
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
1. / 2. / ... 
<?php

define
('CACHEDIR'dirname(__FILE__));

function 
curl_get_contents($uri$timeout=60) {
    
/*
     * Fetch the resource located at URI
     * Return the contents
     * 
     * Parameters:
     * $uri (string)
     * $timeout (int)
     */
    
$ch curl_init($uri);
    
curl_setopt($chCURLOPT_HEADER0);
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
curl_setopt($chCURLOPT_CONNECTTIMEOUT$timeout);
    
curl_setopt($chCURLOPT_TIMEOUT$timeout);
    
$contents curl_exec($ch);
    
curl_close($ch);
    return 
$contents;
}

function 
nfsw_get_playerstats($playernames$fields = array('all'), 
                              
$cache_lifetime 300) {
    
/*
     * Fetch the given players and fields via the Need for Speed Stats API
     * (http://api.nfs-s.com/api/nfsw)
     * Return the players as PHP array
     * 
     * Parameters:
     * $playernames (array)    Player names as array of strings
     * $fields (array)         Field names as array of strings
     * $cache_lifetime (int)   Cache lifetime in seconds
     */
    
$playernames implode(','$playernames);
    
$fields implode(','$fields);
    
$cached CACHEDIR '/.nfsw-stats-' crc32($playernames) . '-' 
              
crc32($fields) . '.tmp';
    if (
file_exists($cached) && filemtime($cached) > time() - $cache_lifetime)
        
$result file_get_contents($cached);
    else {
        
$result curl_get_contents('http://api.nfs-s.com/api/nfsw?players=' 
                                    
$playernames '&fields=' $fields);
        
file_put_contents($cached$result);
    }
    if (empty(
$result))
        
trigger_error('No data returned by nfsw_get_playerstats()'
                      
E_USER_NOTICE);
    
$result json_decode($resulttrue);
    return 
$result;
}

function 
nfsw_list_players_rank($playernames$cache_lifetime 300) {
    
/*
     * Print the given players ranks
     * 
     * Parameters:
     * $playernames (array)    Player names as array of strings
     * $cache_lifetime (int)   Cache lifetime in seconds
     */
    
$result nfsw_get_playerstats($playernames, array('rank'), 
                                   
$cache_lifetime);
    if (!empty(
$result['players'])) {
        echo 
'<ul>';
        foreach (
$result['players'] as $i => $player) {
            echo 
'<li>Player: ' htmlspecialchars($player['personaName'], 
                                                   
ENT_COMPAT'UTF-8') . 
                 
'<br />Rank: ' $player['rank'] . '</li>';
        }
        echo 
'</ul>';
    }
}

header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
    <title>NFSW Stats API Test</title>
</head>
<body>

<?php

/*
 * Example:
 * List the ranks of players 1APRIL and TWMTOPT
 * Cache lifetime is 300 seconds (5 minutes)
 */
 
nfsw_list_players_rank(array('1APRIL''TWMTOPT'), 300);

?>

</body>
</html>


Dieser Beispielcode zeigt Playername und Rank von den Spielern 1APRIL und TWMTOPT an.
Im Grunde läuft es auf die Funktion nfsw_get_playerstats($playernames) hinaus, die bei Übergabe von Spielernamen als Array ein ebensolches mit den Stats zurückliefert. Noch ein Beispiel wie man den Rank eines einzelnen Spielers bekommt:

Code zeigen +-
 
1.
2.
3.
4.
1. / 2. / ... 
<?php
$result 
nfsw_get_playerstats(array('Spielername hier'));
$rank $result['players'][0]['rank'];
?>


Alle Ergebnisse werden standardmäßig 5 Minuten zwischengespeichert, um nicht unnötig Netzwerklast zu erzeugen.


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 7 - 23.07.2011 um 11:24 Uhr
very nice

vielen dank für den anfang. damit kann ich sicherlich was anfangen.

edit:
hab den ersten code in eine stats.php kopiert. allerdings kommt nun eine fehlermeldung :

Fatal error: Call to undefined function curl_init() in /users/wkh/www/stats.php on line 14

ich hab doch jetzt schon sicher was falsch gemacht oder?

hab gelesen das curl enabled sein muss aber ich finde den eintrag nich.
http://wkh.bplaced.net/info.php


------------------


Zuletzt editiert von 12die4 am 23.07.2011 um 11:44 Uhr (2x Editiert)
Inaktiv
|
SlayR ClanSphere Team


Geekboy




Herkunft: Calbe (Saale)
Beiträge: 1133
# Antwort: 8 - 23.07.2011 um 12:48 Uhr
Es ist auch mehr als unwahrscheinlich, das ein freehoster curl überhaupt anbietet. curl stellt in unbedarften Händen ein Sicherheitsrisiko dar, da mit dieser Funktion Code und Variablen Seiten- und Domainübergreifend eingesetzt werden kann und somit auch Schadcode auf die Webseit eingefügt werden könnte. Um API-Aufrufe und ähnliches auf jeden Fall und relativ sicher betreiben zu können, ist man mit zumindest einem V-Server fein raus, da hier einem als Betreiber nicht vorgeschrieben wird, welche Funktionen man aktivieren/nutzen kann.

Long Story short:
Vergiss es, keine API-Zugriffe über CURL für Dich!


------------------
--- CLANSPHERE ---
Professional clan care starts here


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 9 - 23.07.2011 um 12:54 Uhr
ok danke dir für die info.
habe mir sowas schon gedacht. aber ich wollte nicht für ein projekt geld ausgeben, bei dem ich noch nicht weiss wo es hinführt ^^

aber nicht desto trotz ist es vllt für andere hilfreich die eigene server betreiben ^^ die arbeit von cbw.lava war also nicht umsonst.



------------------


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 10 - 17.09.2011 um 12:55 Uhr
@cbw.lava oder auch jmd mit ahnung ^^

ich habe es nun zum laufen bekommen da ich nun curl nutzen kann.

meine frage. momentan werden die ergebnisse alphabetisch sortiert. ich würde das gerne so haben das es nach den rängen sortiert wird. also der beste platz oben.


------------------


Inaktiv
|
cbw.lava


Rock the board





Beiträge: 63
# Antwort: 11 - 19.09.2011 um 15:05 Uhr
usort() ist dein Freund
 
1.
2.
3.
4.
1. / 2. / ... 
 function nfsw_playerstats_sort_by_rank_desc($a$b) {
    if (
$a['rank'] == $b['rank']) return 0;
    return (
$a['rank'] > $b['rank']) ? -1;
}


Dann dort, wo du das Ergebnis verarbeitest:
 
1.
1. / 2. / ... 
 usort($result['players'], 'nfsw_playerstats_sort_by_rank_desc');


Inaktiv
|
ev0lution
Thread-Ersteller


Geekboy





Beiträge: 1103
# Antwort: 12 - 19.09.2011 um 16:42 Uhr
dafür schon mal recht herzlichen dank.
danke dir dat läuft ^^ allerdings ist der letzte platz nun oben und der erste unten.
das muss ich doch sicherlich irgendwie mit "ASC" und nicht mit "DESC" sortieren oder?

edit:
ich musste nur > in < ändern nur gehts ^^

nochmals danke schön dafür


------------------


Zuletzt editiert von 12die4 am 19.09.2011 um 16:50 Uhr (3x Editiert)
Inaktiv
|

Dieses Thema wurde von palle ClanSphere Team PM geschlossen.

Antworten: 12
Seite [1]