ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/2.8.x/webapp/lib/db/rss.php @ 2853

Last change on this file since 2853 was 2853, checked in by ogawa, 14 years ago

#744:SQLの「IN ()」でカッコ内が空の場合にMySQLエラーが発生する

File size: 5.9 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7function db_rss_h_blog_list_friend4c_member_id($c_member_id, $page_size = 5)
8{
9    $sql = "SELECT c_rss_cache.*, c_member.nickname" .
10        " FROM c_rss_cache, c_member" .
11        " WHERE c_member.c_member_id = c_rss_cache.c_member_id" .
12            " AND c_rss_cache.c_member_id = ?" .
13        " ORDER BY c_rss_cache.r_datetime DESC";
14    $params = array(intval($c_member_id));
15    return db_get_all_limit($sql, 0, $page_size, $params);
16}
17
18function db_rss_list_all_c_rss_cache_list($limit)
19{
20    $hint = db_mysql_hint('FORCE INDEX (r_datetime)');
21    $sql = 'SELECT * FROM c_rss_cache' . $hint . ' ORDER BY r_datetime DESC';
22    $lst = db_get_all_limit($sql, 0, $limit);
23
24    foreach ($lst as $key => $value) {
25        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
26    }
27    return $lst;
28}
29
30function db_rss_list_friend_c_rss_cache_list($c_member_id, $limit)
31{
32    $friends = db_friend_c_member_id_list($c_member_id, true);
33    if (!$friends) {
34        return array();
35    }
36    $ids = implode(',', array_map('intval', $friends));
37
38    $hint = db_mysql_hint('USE INDEX (r_datetime_c_member_id, r_datetime)');
39    $sql = 'SELECT * FROM c_rss_cache' . $hint .
40            ' WHERE c_member_id IN (' . $ids . ')' .
41            ' ORDER BY r_datetime DESC';
42    $list = db_get_all_limit($sql, 0, $limit);
43
44    foreach ($list as $key => $value) {
45        $list[$key]['c_member'] = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
46    }
47    return $list;
48}
49
50function db_rss_list_c_rss_cache_list($c_member_id,$page_size, $page)
51{
52    $sql = 'SELECT * FROM c_rss_cache WHERE c_member_id = ? ORDER BY r_datetime DESC';
53    $params = array(intval($c_member_id));
54    $lst = db_get_all_page($sql, $page, $page_size, $params);
55
56    foreach ($lst as $key => $value) {
57        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
58    }
59    return $lst;
60}
61
62function db_rss_list_c_rss_cache_list_date($c_member_id, $year, $month, $day=0)
63{
64    if ($day) {
65        $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
66        $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day+1, $year));
67    } else {
68        $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1, $year));
69        $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month+1, 1, $year));
70    }
71
72    $sql = 'SELECT * FROM c_rss_cache WHERE c_member_id = ?' .
73            ' AND r_datetime >= ? AND r_datetime < ?' .
74            ' ORDER BY r_datetime DESC';
75    $params = array(intval($c_member_id), $s_date, $e_date);
76    $lst = db_get_all($sql, $params);
77
78    foreach ($lst as $key => $value) {
79        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
80    }
81    return $lst;
82}
83
84function db_rss_c_rss_cache_list4c_member_id($c_member_id, $limit = 5)
85{
86    $sql = 'SELECT * FROM c_rss_cache WHERE c_member_id = ? ORDER BY r_datetime DESC';
87    $params = array(intval($c_member_id));
88    return db_get_all_limit($sql, 0, $limit, $params);
89}
90
91function db_rss_is_duplicated_rss_cache($c_member_id, $date, $link)
92{
93    $sql = 'SELECT c_rss_cache_id FROM c_rss_cache' .
94            ' WHERE c_member_id = ? AND r_datetime = ? AND link = ?';
95    $params = array(intval($c_member_id), $date, $link);
96    return (bool)db_get_one($sql, $params);
97}
98
99function db_rss_is_updated_rss_cache($c_member_id, $link)
100{
101    $sql = 'SELECT c_rss_cache_id FROM c_rss_cache' .
102            ' WHERE c_member_id = ? AND link = ?';
103    $params = array(intval($c_member_id), $link);
104    return db_get_one($sql, $params);
105}
106
107function db_rss_is_future_rss_item($date)
108{
109    $item_timestamp = strtotime($date);
110    return (bool)($item_timestamp > time());
111}
112
113?>
114<?php
115/**
116 * @copyright 2005-2007 OpenPNE Project
117 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
118 */
119
120function db_rss_insert_c_rss_cache($c_member_id, $subject, $body, $date, $link)
121{
122    $data = array(
123        'c_member_id' => intval($c_member_id),
124        'subject'     => $subject,
125        'body'        => $body,
126        'r_datetime'  => $date,
127        'link'        => $link,
128        'cache_date'  => db_now(),
129    );
130    return db_insert('c_rss_cache', $data);
131}
132
133function db_rss_update_c_rss_cache($c_rss_cache_id, $subject, $body, $date, $link)
134{
135    $data = array(
136        'subject'     => $subject,
137        'body'        => $body,
138        'r_datetime'  => $date,
139        'link'        => $link,
140        'cache_date'  => db_now(),
141    );
142    $where = 'c_rss_cache_id = '.intval($c_rss_cache_id);
143    return db_update('c_rss_cache', $data, $where);
144}
145
146/**
147 * メンバーのRSSを削除する
148 */
149function db_rss_delete_rss_cache($c_member_id)
150{
151    $sql = 'DELETE FROM c_rss_cache WHERE c_member_id = ?';
152    $params = array(intval($c_member_id));
153    return db_query($sql, $params);
154}
155
156function db_rss_insert_rss_cache($rss_url, $c_member_id)
157{
158    include_once 'OpenPNE/RSS.php';
159    $rss = new OpenPNE_RSS();
160    if (!$items = $rss->fetch($rss_url)) {
161        return false;
162    }
163
164    foreach ($items as $item) {
165        // エスケープされた文字列を元に戻す
166        $trans_table = array_flip(get_html_translation_table());
167        $item['title'] = strtr($item['title'], $trans_table);
168        $item['body'] = strtr($item['body'], $trans_table);
169
170        // 最新のものと比較
171        if (!db_is_duplicated_rss_cache($c_member_id, $item['date'], $item['link']) &&
172            !db_is_future_rss_item($item['date'])) {
173
174            if ($id = db_is_updated_rss_cache($c_member_id, $item['link'])) {
175                // update
176                db_update_c_rss_cache($id,
177                    $item['title'], $item['body'], $item['date'], $item['link']);
178            } else {
179                // insert
180                db_insert_c_rss_cache($c_member_id,
181                    $item['title'], $item['body'], $item['date'], $item['link']);
182            }
183        }
184    }
185}
186
187?>
Note: See TracBrowser for help on using the repository browser.