0

我正在创建一个会员卡,显示从他们的个人资料网址中抓取的成员列表并作为图像输出。

描述我想要完成的事情的最佳方式是向您展示:

这就是我想要做的。

使用简单 HTML DOM 解析器从那里提取玩家别名、级别和排名。

到目前为止,这是我使用以下代码成功实现的目标:

我的刮擦尝试

<?php 
include_once('simple_html_dom.php');

function extract_numbers($string) {
    preg_match_all('/([\d]+)/', $string, $match);
    return $match[0];
}

function scraping_uberstrike($url) {
    // create HTML DOM
    $html = file_get_html($url);



 // Find rank, level and xp
    $string =  $html->find("h2 p", 0)->innertext;
    $numbers_array = extract_numbers($string);

// get name
$ret['Alias'] = $html->find('span[id="uberstrikeUserName"]', 0)->innertext;

// get level
$ret['Level'] = $numbers_array['1'];

// get rank
$ret['Rank'] = $numbers_array['0'];

// clean up memory
$html->clear();
unset($html);

return $ret;
}

// 要抓取的 URL

$links = array (
   'http://uberstrike.cmune.com/CommonChannel/Profile?cmid=4758758&channelType=WebPortal&appCallbackUrl=http%3a%2f%2fuberstrike.cmune.com%2fProfile',
   'http://uberstrike.cmune.com/CommonChannel/Profile?cmid=5909289&channelType=WebPortal&appCallbackUrl=http%3a%2f%2fuberstrike.cmune.com%2fProfile'
 );

$image = imagecreatefrompng("eQ.png");
$color = ImageColorAllocate($image, 203,203,203);
$shadow = ImageColorAllocate($image, 25,25,25);
$font = "ColabBol.otf";

$a=2;
$b=1;

// Outputs the scrape

foreach ($links as $link) {
    $ret = scraping_uberstrike($link);
        foreach($ret as $k=>$v) {

          $a = $a + 40;
          $b = $b + 40;
            imagettftext($image, 14, 0, 106,  $a, $shadow, $font, $v);
            imagettftext($image, 14, 0, 105, $b, $color, $font, $v);
        }
} 

header("content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

请注意如何使用 foreach 循环定位玩家详细信息,我很难获得与我正在尝试做的 jpg 相同的输出。

必须有一些错误或不同的方法用于 foreach 循环才能正确显示详细信息。

如果这有助于您理解我的代码,我已将所有必要的文件放在一个 zip 存档中。

http://lifeofstrange.com/scrape/scrape.zip

我希望我已经说清楚了。

并期待您的解决方案。

谢谢 :)

4

1 回答 1

0

抱歉,我不知道您的代码给出的输出与“some_path/output.jpg”不同。您要求陌生人解压缩文件并访问异地 URL 等。尝试使用整数来演示您的问题,或者将问题限制在一个特定的图形元素上。

解决问题的好地方是在数据收集和数据输出部分之间。如果那不是您的麻烦区域,请不要让有用的路人阅读一堆 file_get() 和正则表达式。分离输入和输出也将有助于您的程序结构。

编程的第一条规则,首先处理你的数据结构,然后去寻找漂亮的东西。在您的情况下,这意味着让您编写程序,以便您可以以某种格式读取和打印“别名”、“级别”和“排名”作为简单的标量,然后使用某种样本数据集处理图形。稍后将这两个工作部分结合起来比一堆意大利面条要容易得多。

这两行对我来说看起来很奇怪:

        imagettftext($image, 14, 0, 106,  $a, $shadow, $font, $v);
        imagettftext($image, 14, 0, 105, $b, $color, $font, $v);

它们在 x 和 y 中相隔一个像素。这是你想要的吗?尺寸和角度也应该是浮点数(我不知道 PHP 以及它是否会投射这些)至少使用“... 14.0, 0.0,...”

这就是我能提供的所有帮助,正如我所说,我不知道 PHP。

于 2012-05-18T00:22:21.883 回答