おなまえ
Eメール
タイトル
コメント
参照URL
添付File
暗証キー (英数字8文字以内)
画像認証 (右画像の数字入力) 投稿キー
文字色
無題

本のランキングを画像とともに表示するプログラムを作りたいのですがうまくいきません。
どのようにしたらいいでしょうか?

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Web情報収集システム</title>
<style media='screen'>
.flex-container {
display: flex;
flex-wrap: wrap;
}
.card {
position: relative;
width: 320px;
margin: 25px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px #ccc;
}
.card a {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.card-img {
border-radius: 5px 5px 0 0;
max-width: 320px;
width: 100%;
height: auto;
}
.card-content {
padding: 20px;
}
.card-title {
font-size: 20px;
margin-bottom: 20px;
text-align: center;
color: #333;
}
.card-text {
color: #333;
font-size: 14px;
line-height: 1.5;
}
.card-fotter {
text-align: center;
color: #777;
border-top: 1px solid #eee;
padding: 20px;
}
.card-fotter span {
display: block;
margin: 0 10px;
}
</style>
</head>
<body>
<h1>honto 自然科学・環境の本のランキング</h1>

<?php
require_once('phpQuery-onefile.php');
require_once("pathChanger.php");
$url = 'https://honto.jp/ranking/gr/bestseller_1101_1201_011_029021000000.html';
$doc = phpQuery::newDocumentFileHTML($url);
echo "<div>";
$table = $doc['#rankBox>table'];
echo $table;
echo "</div>";

?>
</body>
</html>

2018/11/27(Tue) 12:00 No.531 [返信]
Re: 無題
このプログラムだと「idがrankBoxの中のtableを取りだす」ことになるのですが,取得元のページを見る限りrankBoxというidのタグが見つからないので,何も表示されていないんだと思います.
ランキングは"stProduct02"というclassのdivタグの中にあるので,PHPの中を下記のようにすると取得できると思います.

<?php
require_once('phpQuery-onefile.php');
require_once("pathChanger.php");
$url = 'https://honto.jp/ranking/gr/bestseller_1101_1201_011_029021000000.html';
$doc = phpQuery::newDocumentFileHTML($url);
echo "<div>";
$table = $doc['.stProduct02']; #←divタグの"stProduct02"classを取得
foreach($table as $row){ #←foreach関数を使って1つずつ表示させる
echo pq($row)->find('.stRank')->text(); #←順位の数字
echo pq($row)->find('.stInfo'); #←内容
}
echo "</div>";

?>
渡邉(TA) 2018/11/27(Tue) 12:49 No.543
Re: 無題
ありがとうございます。
続けての質問で申し訳ないのですが、各ページのリンク先にある商品説明をこのページに持ってくることは可能なのでしょうか?
2018/11/27(Tue) 13:08 No.546
Re: 無題
少し複雑ですが,リンク先のURLを取得して,ランキングのページと同じように読み込み,説明が載っている部分のタグを取得すれば可能です.
例を載せておきます.

$place_url = pq($row)->find('.stInfo')->find('.stHeading')->find('a')->attr('href'); #←リンク先のURL取得
$place = phpQuery::newDocumentFileHTML($place_url); #←リンク先のページ読み込み
$text = $place['.stOverview>.stText']; #←説明を取得
echo $text;
渡邉(TA) 2018/11/27(Tue) 14:56 No.556
Re: 無題
すみません.さっきの回答の補足です.
先ほどのコードはforeach関数の中に書く前提なので注意してください.
渡邉(TA) 2018/11/27(Tue) 15:01 No.558
Re: 無題
できました。ありがとうございます。
2018/11/27(Tue) 16:16 No.563
無題

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>京都市内の駐車場の空き情報</title>
</head>
<body>
<h1>京都市内の駐車場の空き情報</h1>
<?php
require_once("phpQuery-onefile.php");
$url = "https://www.kyotopublic.or.jp/sp/manku/index.html";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
echo $doc['.place>a'];
?>
</body>
</html>


https://www.kyotopublic.or.jp/sp/manku/index.htmlこのサイトの車の空き駐車場のテキストデータを取得したいのですが表示されませんどうすればいいでしょうか?

匿名希望 2018/11/27(Tue) 14:05 Home No.548 [返信]
Re: 無題
<?php ... ?>
の部分をこのように変えてみてください.

-----
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.kyotopublic.or.jp/mobile.php";
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$text = $doc['#main_tbl']->find('tr');
echo "<div class='list'>";
foreach ($text as $value){
echo pq($value)->text();
echo "<br>";
}
echo "</div>";
?>
-----

確認したところ,このページ自体も他のページを参照して情報をとってきているようでした.辿るとこのページでした.(https://www.kyotopublic.or.jp/mobile.php)

ここを指定すると,テキストをとってくることができます.
柿本(TA) 2018/11/27(Tue) 14:43 No.553
Re: 無題
ありがとうございます。やってみると大体はできましたがホームページでは駐車場の「空」という字がテキストでなく画像ですべて表されていてこのままだと「空」という字が表示されないままになってしまいました。どうすればいいでしょうか?お忙しい中すみません。
匿名希望 2018/11/27(Tue) 15:04 No.559
Re: 無題
追加すみません。「満」という文字も同様です。
匿名希望 2018/11/27(Tue) 15:16 No.560
Re: 無題
いえいえ,大丈夫ですよ

空き状態に関してですが,これは画像でしかとってくることができませんね.
なので,画像を取ってきましょう.

以下のように書き換えてみてください.
(詳しい解説はコメントの通りです.)

-----
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.kyotopublic.or.jp/mobile.php";
$img_url = "https://www.kyotopublic.or.jp/"; #画像用のURLを設定しておく
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$text = $doc['#main_tbl']->find('tr');
echo "<div class='list'>";
foreach ($text as $value){
$status = pq($value)->find('img:eq(1)'); #空き状態の画像を取得
$status = fullpath($status, $url); #画像にURLを設定
echo pq($value)->text();
echo $status; #画像を表示する
echo "<br>";
}
echo "</div>";
?>
-----
柿本(TA) 2018/11/27(Tue) 15:20 No.561
Re: 無題
できました。ありがとうございました。
匿名希望 2018/11/27(Tue) 15:28 No.562
無題

何度もすみません
値下げが行われている7位と9位のランキング表示に値下げされた値段がかぶっているのを本来の値段のところに赤字で表示させたいです。どう変更すればいいですか?

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web情報収集システム</title>
<style>
.flex-container {
display: flex;
flex-wrap: wrap;
}
.card {
position: relative;
width: 320px;
margin: 25px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px #ccc;
}
img {
width: 100%;
}
span {
position: absolute;
top: 10px;
left: 10px;
font-size: 2em;
font-weight: bold;
color: #fff;
}
</style>
</head>
<body>
<h1>Web情報収集システム</h1>
<h2>人気の服ランキングTop10
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = "https://www.olivedesolive-ec.jp/ranking/?period=14";
$doc = phpQuery::newDocumentFileHTML($url);
echo '(取得サイト:'.$doc['title']->text().')'.'<br>';

echo '<div class="flex-container">';

for($i = 0; $i < 10; $i++) {
echo '<div class="card">';
echo '<span>'.($i+1).'</span>';
echo "<p class='product'>";
$img = $doc[".product > .product__photo"]->find("a:eq(".$i.")");
$img = $img->find("img");
echo fullpath($img, $url);
echo $doc[".product > .product__text"]->find("a:eq(".$i.")");
echo '</div>';
}
echo '</div>';
?>
</body>
</html>

s.m 2018/11/27(Tue) 13:19 No.547 [返信]
Re: 無題
この部分を
-----
span {
position: absolute;
top: 10px;
left: 10px;
font-size: 2em;
font-weight: bold;
color: #fff;
}
-----

このように変更してください
-----
.card > span {
position: absolute;
top: 10px;
left: 10px;
font-size: 2em;
font-weight: bold;
color: #fff;
}
-----

spanというクラスに対しては,共通のスタイルが適用されるようになっていたことが原因です.要素の指定方法を変えることで,自由にスタイルを指定することができます.
柿本(TA) 2018/11/27(Tue) 15:00 No.557
無題

エラーが出てしまうのですが、どこを直せばいいのかわかりません。



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 最新グルメニュース!</title>
<style>
div .main{
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-aligm: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
img {
width: 200px;
}
</style>
</head>
<body>
最新グルメニュース!
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.m-mainlist>li'];
echo "<div class='m-mainlist__main'>";
foreach($news as $m-newslist__item){
$img_src = pq($m-newslist__item)->find('$img')->attr('src');
$news_info = pq($m-mainlist__item)->find('.m-newslist__info');
echo "<div class='1-contents'>";
echo "<img src='".$img_src."'></>";
echo $news_info;
echo "</div>";
}
echo "</div>";
?>
</body>
</html>

2018/11/27(Tue) 10:50 Home No.525 [返信]
Re: 無題
以下のようにしてください.
詳細はコメント文で書いています.

----- ここからコード -----
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php"); // pathChanger も読み込む
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';

// .m-mainlist が2つあるので,li までは取得しない
$news = $doc['.m-mainlist'];

echo "<div class='m-mainlist__main'>";

// それぞれの .m-mainlist を取り出す
foreach ($news as $m_mainlist) {

// li タグを取り出す
foreach (pq($m_mainlist)->find('li') as $m_newslist__item){

// fullpath にしないと画像が取り出せないので,
// fullpath を使う
$img_src = fullpath(pq($m_newslist__item)->find('img')->attr('src'), $url);
$news_info = pq($m_mainlist__item)->find('.m-newslist__info');

echo "<div class='1-contents'>";
echo "<img src='".$img_src."'></>";
echo $news_info;
echo "</div>";
}
}

echo "</div>";
?>
----- ここまでコード -----
榎田(TA) 2018/11/27(Tue) 12:01 No.532
Re: 無題
先ほどの指摘のようにしてみましたがエラーが起きてしまいました
コードはこのようになりました

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 最新グルメニュース!</title>
<style>
div .main{
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-aligm: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
img {
width: 200px;
}
</style>
</head>
<body>
最新グルメニュース!
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.m-mainlist'];
echo "<div class='m-mainlist__main'>";
foreach($news as $m-mainlist){         ←
foreach(pq($m_mainlist)->find('li')as $m_newslist__item){
$img_src = fullpath(pq($m-newslist__item)->find('$img')->attr('src'),$url);
$news_info = pq($m-mainlist__item)->find('.m-newslist__info');
echo "<div class='1-contents'>";
echo "<img src='".$img_src."'></>";
echo $news_info;
echo "</div>";
}
}

echo "</div>";
?>
</body>
</html>


teratermで確認するとこのようなメッセージが表示されました
33行目は←の部分なのですが、なにがおかしいのでしょうか?
PHP Parse error: syntax error, unexpected '-', expecting ')' in /home/sys/s236 84/public_html/exsi2018/report.php on line 33
2018/11/27(Tue) 12:22 No.536
Re: 無題
PHPの変数名では - (ハイフン)を使うことができません.なので, $m-mainlist ではなく, $m_mainlist のように _ (アンダーバー)を使うようにしてください.
榎田(TA) 2018/11/27(Tue) 12:31 No.539
Re: 無題
エラーはなくなり
画像と記事は出るようになったのですが、
同じ記事を繰り返しになってしまいます。
解決策をお願いします。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 最新グルメニュース!</title>
<style>
div .main{
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-aligm: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
img {
width: 200px;
}
</style>
</head>
<body>
最新グルメニュース!
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.m-mainlist'];
echo "<div class='m-mainlist__main'>";
foreach($news as $m_mainlist){
foreach(pq($m_mainlist)->find('li')as $m_newslist__item){
$img_src = fullpath(pq($m_newslist__item)->find('$img')->attr('src'),$url);
$news_info = pq($m_mainlist__item)->find('.m-newslist__info');
echo "<div class='1-contents'>";
echo "<img src='".$img_src."'></>";
echo $news_info;
echo "</div>";
}
}

echo "</div>";
?>
</body>
</html>
2018/11/27(Tue) 12:51 Home No.544
Re: 無題
今までの努力が無駄になりますが,以下の行数で表示できます...


----- ここからコード -----
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.m-mainlist'];
$news = $news->find('li');
echo $news;
?>
----- ここまでコード -----
榎田(TA) 2018/11/27(Tue) 14:33 No.551
Re: 無題
ありがとうございます。
2018/11/27(Tue) 14:47 No.555
無題

2度目で申し訳ありません。
長くなってしまったのでもう一度投稿させていただきます。
同じ記事が連続になってしまうのですがどうすればいいのでしょうか?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 最新グルメニュース!</title>
<style>
div .main{
float: left;
background: #ffffff;
width: 300px;
padding: 20px;
text-aligm: left;
border: 1px solid #cccccc;
margin: 15px 5px 10px 4px;
color: #ff6600;
}
img {
width: 200px;
}
</style>
</head>
<body>
最新グルメニュース!
<h1>Web情報収集システム</h1>
<?php
require_once("phpQuery-onefile.php");
require_once("pathChanger.php");
$url = 'https://www.walkerplus.com/article_list/ar0727/ag0001/';
$doc = phpQuery::newDocumentFileHTML($url);
echo '取得サイト:'.$doc['title']->text().'<br>';
$news = $doc['.m-mainlist'];
echo "<div class='m-mainlist__main'>";
foreach($news as $m_mainlist){
foreach(pq($m_mainlist)->find('li')as $m_newslist__item){
$img_src = fullpath(pq($m_newslist__item)->find('$img')->attr('src'),$url);
$news_info = pq($m_mainlist__item)->find('.m-newslist__info');
echo "<div class='1-contents'>";
echo "<img src='".$img_src."'></>";
echo $news_info;
echo "</div>";
}
}

echo "</div>";
?>
</body>
</html>

2018/11/27(Tue) 14:37 No.552 [返信]
Re: 無題
この投稿は無視してください
申し訳ありません
2018/11/27(Tue) 14:46 No.554
処理 記事No 暗証キー

- JoyfulNote -