0

プロフィールの URL からスクレイピングされ、画像として出力されるメンバーのリストを表示するメンバー カードを作成しています。

私が達成しようとしていることを説明する最良の方法は、あなたに示すことです:

これが私がやろうとしていることです。

プレーヤーのエイリアス、レベル、およびランクは、 Simple 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() と正規表現を読ませないでください。入力と出力を分離すると、プログラムの構造にも役立ちます。

プログラミングの第 1 のルールは、まずデータ構造に取り組み、次にきれいなものに取り掛かります。あなたの場合、それはプログラムを取得して、「エイリアス」、「レベル」、および「ランク」をある種の形式の単純なスカラーとして読み取りおよび出力し、ある種のサンプルデータセットを使用してグラフィックスで作業できるようにすることを意味します。後で 2 つの作業部分を組み合わせることは、スパゲッティオの混乱よりもはるかに簡単です。

これらの2行は私には奇妙に見えます:

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

これらは、x と y で 1 ピクセル離れています。これはあなたが望んでいたものですか?また、サイズと角度は浮動小数点数であると想定されています(PHPは知らず、これらをキャストするかどうかはわかりません)少なくとも「... 14.0、0.0、...」を使用してください

前述したように、私は PHP を知りません。

于 2012-05-18T00:22:21.883 に答える