有趣的项目:PHP foreach 循环和抓取


Fun project: PHP foreach loop and Scraping

>我正在创建一个会员卡,该卡显示从其个人资料URL中抓取的成员列表,并以图像形式输出。

描述我想要完成的最好方法是向您展示:

这就是我正在努力做的。

玩家别名,等级和等级使用简单的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;
}

抓取网址

$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

我希望我已经把这一点说清楚了。

并期待您的解决方案。

谢谢:)

抱歉,

我不知道您的代码作为输出给出的输出与"some_path/输出.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。