Mitglieder-Liste hat fehlende Daten

Sorgonas

Quest-Mob
Mitglied seit
30.03.2010
Beiträge
69
Reaktionspunkte
0
Hallo an alle,

 

wie beschrieben bekomme ich nicht alles angezeigt. Bis vor kurzem habe ich auch nur 61 von 77 Member angezeigt bekommen, nun bekomme ich oben in der Gildeninfo die richtige Anzahl angezeigt, unten jedoch habe ich nur leere felder bei den 16 nachträglichen Daten.

 

Das was ich unter diesem code geschrieben habe,ist das was ich nachträglich abgeändert habe, um die richtige Anzahl zu bekommen.

 

Ich hoffe Ihr könnt mir da nun mit weiter helfen.

 

dies hier ist der code von Cronjob.php:

<?php
// Konfiguration
$sGuildName = 'Familia de Lux';
$sRealmName = 'Lothar';
$sGuildFields= 'members'; // Möglich sind: achievements, members
$iMaxEntries = 1; // Anzahl der maximalen Einträge pro Zeile
$sMemberFields = 'talents,professions,items';
$sCacheFile = 'cache.sth';
$iCacheTimeout = 1; // Cache-Timeout in Sekunden
$sAPIURL = 'http://eu.battle.net/api/wow/';
$aGuildData = array();

$sRawEncodedRealm = rawurlencode($sRealmName);
$sRawEncodedGuild = rawurlencode($sGuildName);
$sResponse = null;

if( !is_file($sCacheFile) || (time() - filemtime($sCacheFile)) > $iCacheTimeout || filesize($sCacheFile) == 0 ) {

// Auslesen der Gildendaten.
$sRequestURL = $sAPIURL . 'guild/'.$sRawEncodedRealm.'/'.$sRawEncodedGuild.'?locale=de_de&fields='.$sGuildFields;
$sResponse = @file_get_contents($sRequestURL, true);
if (strpos($http_response_header[0], '200')) {

$http_response_header = null;
$aRawData = json_decode($sResponse, true);
$aGuildData = $aRawData;
unset($aGuildData['members']);

foreach ($aRawData['members'] as $aMemberItem )
{
$sCharName = $aMemberItem['character']['name'];
$sCharResponse = @file_get_contents(
$sAPIURL . 'character/'.$sRawEncodedRealm.'/'.urlencode(html_entity_decode($sCharName, ENT_COMPAT, 'UTF-8')).'?locale=de_de&fields='.$sMemberFields
, true
);

// Prüfe Rückgabe
if (strpos($http_response_header[0], '200')) {

$aDecodeMember = json_decode($sCharResponse, true);
$aGuildData['members'][] = json_decode($sCharResponse, true);
}

}

//print_r(json_encode($aGuildData));
file_put_contents($sCacheFile, json_encode($aGuildData));

unset($aGuild, $decodeMember, $aRawData, $http_response_header, $sCharResponse, $sResponse);
}
}
?>

Code:
// Prüfe Rückgabe
if (strpos($http_response_header[0], '200')) {

$aDecodeMember = json_decode($sCharResponse, true);
$aGuildData['members'][] = json_decode($sCharResponse, true);
}
else {$aDecodeMember = json_decode($sCharResponse, true);
$aGuildData['members'][] = json_decode($sCharResponse, true);

}
}
Ich habe die Seite mal komplett unten angefügt:

 

1. cronfrage.php (Datei zum auslesen der Gilden-Informationen)

2. konfig.php (Variablen zum anzeigen verschiedener Atribute)

3. mitglieder.php (Hauptseite der Mitgliederliste)

4. mitglieder.css (ist wohl klar was dies ist http://www.php.de/images/smilies/icon_wink.gif )
 
1.) Einrückung macht den Code unglaublich leichter zu lesen.

 

Also statt:

if ($irgendwas > $irgendwasAnderes) {
mache_irgendwas();
$variableX = 100;
foreach($foo as $bar) {
if ($blub == $bar) {
...
}
}
}
... schreib doch bitte ...

if ($irgendwas > $irgendwasAnderes) {
  mache_irgendwas();
  $variableX = 100;
  foreach($foo as $bar) {
    if ($blub == $bar) {
      ...
    }
  }
}
Damit hilfst du denen, die dir helfen wollen, schonmal ziemlich weiter. ;)

 

2.) Ich kenne mich mit der Battle.Net-API nicht aus. Aber wenn ich da auf Fehlersuche wäre, würde ich mir erstmal den Inhalt der Rückgaben ausgeben lassen und anschauen.

 

Code:
if (strpos($http_response_header[0], '200')) {
  $http_response_header = null;
  $aRawData = json_decode($sResponse, true);
 
  // Debug Ausgabe
  echo "<pre>"; print_r($aRawData); echo "</pre">;
  // ...
}
 
danke für den tip, werde versuchen diesen für das nächste mal zu beherzigen.

 

mir ist gerade aufgefallen, warum ich diese anderen nicht angezeigt bekomme. Ich bin auf dem realm Lothar und darauf hab ich die hp auch ausgelegt.

die anderen sind vom Server Baelgun. Nun kommt mein nächstes problem, wie mache ich es nun das ich beide so auch angezeigt bekomme.
 
Im ersten Schritt empfehle ich erst mal den Zugriff und die Abfrage der Daten auf die neue API umzustellen und dir einen Api-Key zu holen:

https://dev.battle.net/
 
Alt:
Code:
foreach ($aRawData['members'] as $aMemberItem )
{
    $sCharName = $aMemberItem['character']['name'];
    $sCharResponse = @file_get_contents(
    $sAPIURL . 'character/'.$sRawEncodedRealm.'/'.urlencode(html_entity_decode($sCharName, ENT_COMPAT, 'UTF-8')).'?locale=de_de&fields='.$sMemberFields, true);
Neu:
Code:
foreach ($aRawData['members'] as $aMemberItem )
{
    $sCharName = $aMemberItem['character']['name'];
    $sCharResponse = @file_get_contents(
    $sAPIURL . 'character/'.rawurlencode($aMemberItem['character']['realm']).'/'.urlencode(html_entity_decode($sCharName, ENT_COMPAT, 'UTF-8')).'?locale=de_de&fields='.$sMemberFields, true);
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für deine schnelle Antwort Zam, ich habe das mit der api ...   da angemeldet und nun auch so ne nummer usw. jedoch keine ahnung, wie ich das bei mir einbauen sollte,

 

habe nun auf der mitglieder.php versucht kurz vor der Tabelle wo die mitglieder infos drin sind, es hiermit zu ändern

if ($aMemberItem['character']['realm'] == 'Lothar'){
$aMemberItem['character']['realm'] = str_replace("Lothar","Baelgun",$aMemberItem['character']['realm']);}

else{$aMemberItem['character']['realm'] = str_replace("Lothar","Lothar",$aMemberItem['character']['realm']);}

leider funktioniert das nicht so ganz,
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für deine schnelle Antwort Zam, ich habe das mit der api ...   da angemeldet und nun auch so ne nummer usw. jedoch keine ahnung, wie ich das bei mir einbauen sollte,


Steht auf der API-Seite :)
 
habe nun auf der mitglieder.php versucht kurz vor der Tabelle wo die mitglieder infos drin sind, es hiermit zu ändern


Warum?
 
weil ich von den chars aus baelgun so ja keine daten angezeigt bekomme
 
Mach die Änderung im Cronjob, die ich dir geschrieben habe und verstehe den Code.
Dein Cronjob-Script cached womöglich auch noch die alten Daten.
 
ja hatte er sorry ;) na gut 7 sind nun immer noch ohne daten, keine ahnung warum.

 

wenn ich den code nun richtig verstehe, liesst er den char aus der gilde Lothar aus, und überprüft dann char-spezifisch auf welchem server er liegt und schrebt es unter ['realm'] rein
 
Sind die 7 Chars ggs. seit 3 Monaten nicht mehr aktiv gewesen?
 
das kann gut sein, werde ich heute abend mal in der gildenliste nachschauen
 
ja hattest recht, sind seit mehreren Monaten nicht mehr online gewesen.
 
Ich habe nun die cronfrage.php neu mit meinem API-KEY geschrieben bekommen, jedoch bekomme ich ausser den Gilden-Infos leider keine Member-Daten mehr angezeigt.
Muss an der mitglieder.php nun was geändert oder der api dort auch eingefügt werden? mit der Testausgabe bekomme ich alle Chars rein, jedoch nicht auf der HP.
Hier mal der Code der Seite:
Code:
<?php
// Konfiguration
$apiKey = ''; // Anpassen!
$guildRealm = 'Lothar'; // Auf welchem Server ist Gilde registriert?
$guild = 'Familia de Lux'; // Name der Gilde

$apiUrl = 'https://eu.api.battle.net/wow/';

$cacheFile = dirname(__FILE__).'/cache.sth'; // Speicherort der Cache-Datei
$cacheTimeout = 1; // Cache-Timeout in Sekunden

$characterFields = array('talents', 'professions', 'items'); // Welche Felder der Chars werden benötigt?

// Cache wird nur aufgebaut wenn er noch nicht exisitiert oder wenn der Timeout abgelaufen ist
if(!is_file($cacheFile) || (time() - filemtime($cacheFile)) > $cacheTimeout || filesize($cacheFile) == 0 )
    {
    $guildData = array();

// Daten über die Gilde samt Mitglieder holen - hier sind alle Mitglieder drin unabhängig vom Realm
$query = array(
    'locale' => 'de_DE',
    'fields' => 'members',
    'apikey' => $apiKey
);
$url = $apiUrl.'guild/'.rawurlencode($guildRealm).'/'.rawurlencode($guild).'?'.http_build_query($query);
$response = @file_get_contents($url, true);
$guildData = json_decode($response, true);

// Jetzt alle Chars anhand der Member laden
$chars = array();
foreach($guildData['members'] as $member)
    {
    $memberChar = $member['character'];

// Aber nicht vom oben konfigurierten Gilden-Realm sondern vom Realm der beim Member hinterlegt ist
$query = array(
    'locale' => 'de_DE',
    'fields' => 'talents,professions,items',
    'apikey' => $apiKey
);
$url = $apiUrl.'character/'.rawurlencode($memberChar['realm']).'/'.urlencode(html_entity_decode($memberChar['name'], ENT_COMPAT, 'UTF-8')).'?'.http_build_query($query);
$response = @file_get_contents($url, true);
$chars[] = json_decode($response, true);
}

$guildData['characters'] = $chars;

file_put_contents($cacheFile, json_encode($guildData));

// Testausgabe
echo '<pre>';
print_r($guildData);
}
 
Zuletzt bearbeitet von einem Moderator:
HABS :)

 

Ich musste nur in der mitglieder.php nur die Zeile:
 

foreach ($aGuildData['members'] as $aMemberItem ) {


durch
 

foreach ($aGuildData['characters'] as $aMemberItem ) {


ersetzen.
 
wie schaffe ich es jedoch nach 10 abgerufenen daten eine sec pause rein zu bekommen? jemand da eine idee?
 
Du setzt in der Schleife einen Counter hoch.
$x++;

if ( $x === 10 ) {
sleep(1);
$x = 0;
}


Ich habe übrigens mal deinen API-Key oben aus deinem Kommentar entfernt ...
 
Zuletzt bearbeitet von einem Moderator:
Danke dir.

ok, das was ich versucht hatte, hatte nicht funktioniert ^^ na mal sehen wie ich das nun bei mir eingebaut bekomme ;)
 
Zuletzt bearbeitet von einem Moderator:
kann mir jemand vieleicht helfen diesen code bei mir einzubauen, ich bekomme es leider nicht hin
 
Zurück