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

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

Last change on this file since 2680 was 2680, checked in by ebihara, 13 years ago

#652:RSSのキャッシュをDBにインサートする際、エスケープされたデータを元に戻すようにした

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