forum_relatethread.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: forum_relatethread.php 25791 2011-11-22 07:10:59Z zhengqingpeng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. if(!$_G['setting']['qihoo']['relate']['bbsnum']) {
  12. exit;
  13. }
  14. $_SERVER = empty($_SERVER) ? $HTTP_SERVER_VARS : $_SERVER;
  15. $_GET = empty($_GET) ? $HTTP_GET_VARS : $_GET;
  16. $site = $_SERVER['HTTP_HOST'];
  17. $subjectenc = rawurlencode($_GET['subjectenc']);
  18. $tags = explode(' ',trim($_GET['tagsenc']));
  19. $tid = intval($_GET['tid']);
  20. if($_GET['verifykey'] <> md5($_G['authkey'].$tid.$subjectenc.CHARSET.$site)) {
  21. exit();
  22. }
  23. $tshow = !$_G['setting']['qihoo']['relate']['position'] ? 'mid' : 'bot';
  24. $intnum = intval($_G['setting']['qihoo']['relate']['bbsnum']);
  25. $extnum = intval($_G['setting']['qihoo']['relate']['webnum']);
  26. $exttype = $_G['setting']['qihoo']['relate']['type'];
  27. $up = intval($_GET['qihoo_up']);
  28. $data = @implode('', file("http://related.code.qihoo.com/related.html?title=$subjectenc&ics=".CHARSET."&ocs=".CHARSET."&site=$site&sort=pdate&tshow=$tshow&intnum=$intnum&extnum=$extnum&exttype=$exttype&up=$up"));
  29. if($data) {
  30. $timestamp = time();
  31. $chs = '';
  32. if(PHP_VERSION > '5' && CHARSET != 'utf-8') {
  33. require_once libfile('class/chinese');
  34. $chs = new Chinese('utf-8', CHARSET);
  35. }
  36. $parser = xml_parser_create();
  37. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  38. xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  39. xml_parse_into_struct($parser, $data, $values, $index);
  40. xml_parser_free($parser);
  41. $xmldata = array('chanl', 'fid', 'title', 'tid', 'author', 'pdate', 'rdate', 'rnum', 'vnum', 'insite');
  42. $relatedthreadlist = $keywords = array();
  43. $nextuptime = 0;
  44. foreach($index as $tag => $valuearray) {
  45. if(in_array($tag, $xmldata)) {
  46. foreach($valuearray as $key => $value) {
  47. if($values[$index['title'][$key]]['value']) {
  48. $relatedthreadlist[$key][$tag] = !empty($chs) ? $chs->convert(trim($values[$value]['value'])) : trim($values[$value]['value']);
  49. $relatedthreadlist[$key]['fid'] = !$values[$index['fid'][$key]]['value'] ? preg_replace("/(.+?)\/forum\-(\d+)\-(\d+)\.html/", "\\2", trim($values[$index['curl'][$key]]['value'])) : trim($values[$index['fid'][$key]]['value']);
  50. $relatedthreadlist[$key]['tid'] = !$values[$index['tid'][$key]]['value'] ? preg_replace("/(.+?)\/thread\-(\d+)\-(\d+)-(\d+)\.html/", "\\2", trim($values[$index['surl'][$key]]['value'])) : trim($values[$index['tid'][$key]]['value']);
  51. }
  52. }
  53. } elseif(in_array($tag, array('kw', 'ekw'))) {
  54. $type = $tag == 'kw' ? 'general' : 'trade';
  55. foreach($valuearray as $value) {
  56. $keywords[$type][] = !empty($chs) ? $chs->convert(trim($values[$value]['value'])) : trim($values[$value]['value']);
  57. }
  58. } elseif($tag == 'nextuptime') {
  59. $nextuptime = $values[$index['nextuptime'][0]]['value'];
  60. } elseif($tag == 'keep' && intval($values[$index['keep'][0]]['value'])) {
  61. exit;
  62. }
  63. }
  64. $generalnew = array();
  65. if($keywords['general']) {
  66. $searchkeywords = rawurlencode(implode(' ', $keywords['general']));
  67. foreach($keywords['general'] as $keyword) {
  68. $generalnew[] = $keyword;
  69. if(!in_array($keyword, $tags)) {
  70. $relatedkeywords .= '<a href="forum.php?mod=search&srchtype=qihoo&amp;srchtxt='.rawurlencode($keyword).'&amp;searchsubmit=yes" target="_blank"><strong><font color="red">'.$keyword.'</font></strong></a>&nbsp;';
  71. }
  72. }
  73. }
  74. $keywords['general'] = $generalnew;
  75. $threadlist = array();
  76. if($relatedthreadlist) {
  77. foreach($relatedthreadlist as $key => $relatedthread) {
  78. if($relatedthread['insite'] == 1) {
  79. $threadlist['bbsthread'][] = $relatedthread;
  80. } elseif($_G['setting']['qihoo']['relate']['webnum']) {
  81. if(empty($_G['setting']['qihoo']['relate']['banurl']) || !preg_match($_G['setting']['qihoo']['relate']['banurl'], $relatedthread['tid'])) {
  82. $threadlist['webthread'][] = $relatedthread;
  83. }
  84. }
  85. }
  86. $threadlist['bbsthread'] = $threadlist['bbsthread'] ? array_slice($threadlist['bbsthread'], 0, $_G['setting']['qihoo']['relate']['bbsnum']) : array();
  87. $threadlist['webthread'] = $threadlist['webthread'] ? array_slice($threadlist['webthread'], 0, $_G['setting']['qihoo']['relate']['bbsnum'] - count($threadlist['bbsthread'])) : array();
  88. $relatedthreadlist = array_merge($threadlist['bbsthread'], $threadlist['webthread']);
  89. }
  90. $keywords['general'] = $keywords['general'][0] ? implode("\t", $keywords['general']) : '';
  91. $keywords['trade'] = $keywords['trade'][0] ? implode("\t", $keywords['trade']) : '';
  92. $relatedthreads = $relatedthreadlist ? addslashes(serialize($relatedthreadlist)) : '';
  93. $expiration = $nextuptime ? $nextuptime : $timestamp + 86400;
  94. $data = array('tid' => $tid, 'type' => 'general', 'expiration' => $expiration, 'keywords' => $keywords[general], 'relatedthreads' => $relatedthreads);
  95. C::t('forum_relatedthread')->insert($data, 0, 1);
  96. if($keywords['trade']) {
  97. $data['type'] = 'trade';
  98. $data['keywords'] = $keywords['trade'];
  99. C::t('forum_relatedthread')->insert($data, 0, 1);
  100. }
  101. }
  102. ?>