Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

在你的UCenter Home里面分享豆瓣链接(电影,音乐,图书)

[复制链接]
viswow 发表于 2009-8-3 22:44:29 | 显示全部楼层 |阅读模式
UCHome插件
语言编码: GBK简体 
插件名称: 分享豆瓣链接
插件作者: Viswow
适用版本: UCHome 1.5
本帖最后由 viswow 于 2009-8-3 22:48 编辑

预览图:


备份文件:\source\cp_share.php 、 \template\default\space_share_list.htm 、\template\default\space_share_li.htm 、\template\default\space_feed_li.htm

修改:
1.打开\source\cp_share.php,找到:
找到:
  1. // 判断是否音乐 mp3、wma
复制代码
在此行前增加:
  1.                         //判断是否豆瓣
  2.                         if (strpos($link,'douban.com/subject/')){
  3.                                 $doubaninfo=file_get_contents($link);
  4.                                 $doubanarray=xml2array($doubaninfo);
  5.                                 $arr['title_template'] = cplang('share_douban');
  6.                                 $arr['body_data']['doubanlink']=$doubanarray[html][body][div][div][1][div][div][div][div][div][div][a][attr][href];
  7.                                 $arr['body_data']['doubantitle']=iconv('UTF-8',$_SC['charset'],$doubanarray[html][body][div][div][1][div][div][div][div][div][div][a][attr][title]);
  8.                                 $type = 'douban';
  9.                                
  10.                         }
复制代码
找到:
  1. include template('cp_share');
复制代码
在此行前增加:
  1. function xml2array($contents, $get_attributes=1, $priority = 'attribute') {
  2.      if(!$contents) return array();

  3.      if(!function_exists('xml_parser_create')) {
  4.         //print "'xml_parser_create()' function not found!";
  5.         return array();
  6.      }

  7.     //Get the XML parser of PHP - PHP must have this module for the parser to work
  8.     $parser = xml_parser_create('');
  9.     xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
  10.     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  11.     xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  12.     xml_parse_into_struct($parser, trim($contents), $xml_values);
  13.     xml_parser_free($parser);

  14.      if(!$xml_values) return;//Hmm...

  15.      //Initializations
  16.     $xml_array = array();
  17.     $parents = array();
  18.     $opened_tags = array();
  19.     $arr = array();

  20.     $current = &$xml_array; //Refference

  21.      //Go through the tags.
  22.     $repeated_tag_index = array();//Multiple tags with same name will be turned into an array
  23.     foreach($xml_values as $data) {
  24.          unset($attributes,$value);//Remove existing values, or there will be trouble

  25.          //This command will extract these variables into the foreach scope
  26.          // tag(string), type(string), level(int), attributes(array).
  27.         extract($data);//We could use the array by itself, but this cooler.

  28.         $result = array();
  29.         $attributes_data = array();
  30.         
  31.          if(isset($value)) {
  32.              if($priority == 'tag') $result = $value;
  33.              else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
  34.         }

  35.         //Set the attributes too.
  36.         if(isset($attributes) and $get_attributes) {
  37.              foreach($attributes as $attr => $val) {
  38.                  if($priority == 'tag') $attributes_data[$attr] = $val;
  39.                  else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
  40.             }
  41.          }

  42.         //See tag status and do the needed.
  43.         if($type == "open") {//The starting of the tag '<tag>'
  44.             $parent[$level-1] = &$current;
  45.              if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
  46.                 $current[$tag] = $result;
  47.                  if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
  48.                 $repeated_tag_index[$tag.'_'.$level] = 1;

  49.                 $current = &$current[$tag];

  50.              } else { //There was another element with the same tag name

  51.                 if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
  52.                     $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
  53.                     $repeated_tag_index[$tag.'_'.$level]++;
  54.                  } else {//This section will make the value an array if multiple tags with the same name appear together
  55.                     $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
  56.                     $repeated_tag_index[$tag.'_'.$level] = 2;
  57.                     
  58.                      if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
  59.                         $current[$tag]['0_attr'] = $current[$tag.'_attr'];
  60.                          unset($current[$tag.'_attr']);
  61.                      }

  62.                  }
  63.                 $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
  64.                 $current = &$current[$tag][$last_item_index];
  65.              }

  66.          } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'
  67.              //See if the key is already taken.
  68.             if(!isset($current[$tag])) { //New Key
  69.                 $current[$tag] = $result;
  70.                 $repeated_tag_index[$tag.'_'.$level] = 1;
  71.                  if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;

  72.              } else { //If taken, put all things inside a list(array)
  73.                 if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...

  74.                      // ...push the new element into that array.
  75.                     $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
  76.                     
  77.                      if($priority == 'tag' and $get_attributes and $attributes_data) {
  78.                         $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
  79.                      }
  80.                     $repeated_tag_index[$tag.'_'.$level]++;

  81.                  } else { //If it is not an array...
  82.                     $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
  83.                     $repeated_tag_index[$tag.'_'.$level] = 1;
  84.                      if($priority == 'tag' and $get_attributes) {
  85.                          if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
  86.                            
  87.                             $current[$tag]['0_attr'] = $current[$tag.'_attr'];
  88.                              unset($current[$tag.'_attr']);
  89.                          }
  90.                         
  91.                          if($attributes_data) {
  92.                             $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
  93.                          }
  94.                      }
  95.                     $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
  96.                 }
  97.              }

  98.          } elseif($type == 'close') { //End of tag '</tag>'
  99.             $current = &$parent[$level-1];
  100.          }
  101.      }
  102.    
  103.      return($xml_array);
  104. }
复制代码
保存文件

2.打开\template\default\space_share_list.htm,找到
  1. <a href="$theurl&type=tag"$sub_actives[type_tag]>TAG</a>
复制代码
在此行前增加:
  1. <a href="$theurl&type=douban"$sub_actives[type_space]>豆瓣</a><span class="pipe">|</span>
复制代码
保存文件

3.打开\template\default\space_share_li.htm,找到:
  1.         <img src="image/flash.gif" alt="点击查看" onclick="javascript:showFlash('flash', '{$value['body_data']['flashaddr']}', this, '{$value['sid']}');" style="cursor:pointer;" />
  2.         </div>
复制代码
在后面增加:
  1.         <!--{elseif 'douban' == $value['type']}-->
  2.                 <h2>$value['body_data']['doubantitle']</h2>
  3.                 <img src="$value['body_data']['doubanlink']" class="summaryimg image" width="100"/>
复制代码
保存文件

4.打开\template\default\space_feed_li.htm,找到:
  1.                                 <img src="image/flash.gif" alt="点击查看" onclick="javascript:showFlash('flash', '{$value['body_data']['flashaddr']}', this, '{$value['feedid']}');" style="cursor:pointer;" />
  2.                         </div>
复制代码
在后面增加:
  1.                         <!--{elseif !empty($value['body_data']['doubanlink'])}-->
  2.                                 <h2>$value['body_data']['doubantitle']</h2>
  3.                                 <img src="$value['body_data']['doubanlink']" class="summaryimg image" width="100"/>
复制代码
保存文件

更新缓存,现在在分享界面 ,填入一个豆瓣上面的图书、电影或音乐的链接吧。比如:
  1. http://www.douban.com/subject/2277018/
复制代码
然后看看效果~
个性马甲 发表于 2009-8-4 00:38:29 | 显示全部楼层
学习了
回复

使用道具 举报

。kon. 发表于 2009-8-4 00:51:27 | 显示全部楼层
预览图:
  下载 (31.11 KB)

昨天 22:44  下载 (18.31 KB)

昨天 22:44

备份文件:\source\cp_share.php 、 \template\default\space_share_list.htm 、\template\default\space_share_li.htm 、\template\default\space_feed_li.htm

修改:
1.打开\source\cp_share.php,找到:
找到:// 判断是否音乐 mp3、wma
复制代码在此行前增加:                        //判断是否豆瓣

                        if (strpos($link,'douban.com/subject/')){

                                $doubaninfo=file_get_contents($link);

                                $doubanarray=xml2array($doubaninfo);

                                $arr['title_template'] = cplang('share_douban');

                                $arr['body_data']['doubanlink']=$doubanarray[html][body][div][div][1][div][div][div][div][div][div][a][attr][href];

                                $arr['body_data']['doubantitle']=iconv('UTF-8',$_SC['charset'],$doubanarray[html][body][div][div][1][div][div][div][div][div][div][a][attr][title]);

                                $type = 'douban';

                                

                        }
复制代码找到:include template('cp_share');
复制代码在此行前增加:function xml2array($contents, $get_attributes=1, $priority = 'attribute') {

     if(!$contents) return array();



     if(!function_exists('xml_parser_create')) {

        //print "'xml_parser_create()' function not found!";

        return array();

     }



    //Get the XML parser of PHP - PHP must have this module for the parser to work

    $parser = xml_parser_create('');

    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblo ... -rage-and-data-loss

    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

    xml_parse_into_struct($parser, trim($contents), $xml_values);

    xml_parser_free($parser);



     if(!$xml_values) return;//Hmm...



     //Initializations

    $xml_array = array();

    $parents = array();

    $opened_tags = array();

    $arr = array();



    $current = &$xml_array; //Refference



     //Go through the tags.

    $repeated_tag_index = array();//Multiple tags with same name will be turned into an array

    foreach($xml_values as $data) {

         unset($attributes,$value);//Remove existing values, or there will be trouble



         //This command will extract these variables into the foreach scope

         // tag(string), type(string), level(int), attributes(array).

        extract($data);//We could use the array by itself, but this cooler.



        $result = array();

        $attributes_data = array();

        

         if(isset($value)) {

             if($priority == 'tag') $result = $value;

             else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode

        }



        //Set the attributes too.

        if(isset($attributes) and $get_attributes) {

             foreach($attributes as $attr => $val) {

                 if($priority == 'tag') $attributes_data[$attr] = $val;

                 else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'

            }

         }



        //See tag status and do the needed.

        if($type == "open") {//The starting of the tag '<tag>'

            $parent[$level-1] = &$current;

             if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag

                $current[$tag] = $result;

                 if($attributes_data) $current[$tag. '_attr'] = $attributes_data;

                $repeated_tag_index[$tag.'_'.$level] = 1;



                $current = &$current[$tag];



             } else { //There was another element with the same tag name



                if(isset($current[$tag][0])) {//If there is a 0th element it is already an array

                    $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;

                    $repeated_tag_index[$tag.'_'.$level]++;

                 } else {//This section will make the value an array if multiple tags with the same name appear together

                    $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array

                    $repeated_tag_index[$tag.'_'.$level] = 2;

                    

                     if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well

                        $current[$tag]['0_attr'] = $current[$tag.'_attr'];

                         unset($current[$tag.'_attr']);

                     }



                 }

                $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;

                $current = &$current[$tag][$last_item_index];

             }



         } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'

             //See if the key is already taken.

            if(!isset($current[$tag])) { //New Key

                $current[$tag] = $result;

                $repeated_tag_index[$tag.'_'.$level] = 1;

                 if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;



             } else { //If taken, put all things inside a list(array)

                if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...



                     // ...push the new element into that array.

                    $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;

                    

                     if($priority == 'tag' and $get_attributes and $attributes_data) {

                        $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;

                     }

                    $repeated_tag_index[$tag.'_'.$level]++;



                 } else { //If it is not an array...

                    $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value

                    $repeated_tag_index[$tag.'_'.$level] = 1;

                     if($priority == 'tag' and $get_attributes) {

                         if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well

                           

                            $current[$tag]['0_attr'] = $current[$tag.'_attr'];

                             unset($current[$tag.'_attr']);

                         }

                        

                         if($attributes_data) {

                            $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;

                         }

                     }

                    $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken

                }

             }



         } elseif($type == 'close') { //End of tag '</tag>'

            $current = &$parent[$level-1];

         }

     }

   

     return($xml_array);

}
复制代码保存文件

2.打开\template\default\space_share_list.htm,找到<a href="$theurl&type=tag"$sub_actives[type_tag]>TAG</a>
复制代码在此行前增加:<a href="$theurl&type=douban"$sub_actives[type_space]>豆瓣</a><span class="pipe">|</span>
复制代码保存文件

3.打开\template\default\space_share_li.htm,找到:        <img src="image/flash.gif" alt="点击查看" onclick="javascript:showFlash('flash', '{$value['body_data']['flashaddr']}', this, '{$value['sid']}');" style="cursor:pointer;" />

        </div>
复制代码在后面增加:        <!--{elseif 'douban' == $value['type']}-->

                <h2>$value['body_data']['doubantitle']</h2>

                <img src="$value['body_data']['doubanlink']" class="summaryimg image" width="100"/>
复制代码保存文件

4.打开\template\default\space_feed_li.htm,找到:                                <img src="image/flash.gif" alt="点击查看" onclick="javascript:showFlash('flash', '{$value['body_data']['flashaddr']}', this, '{$value['feedid']}');" style="cursor:pointer;" />

                        </div>
复制代码在后面增加:                        <!--{elseif !empty($value['body_data']['doubanlink'])}-->

                                <h2>$value['body_data']['doubantitle']</h2>

                                <img src="$value['body_data']['doubanlink']" class="summaryimg image" width="100"/>
复制代码保存文件

更新缓存,现在在分享界面 ,填入一个豆瓣上面的图书、电影或音乐的链接吧。比如:http://www.douban.com/subject/2277018/
复制代码然后看看效果~
回复

使用道具 举报

0206ljc 发表于 2009-8-10 23:35:42 | 显示全部楼层
HOME的电影都不能看.只能评价,都不知道有什么意思
回复

使用道具 举报

jackie 发表于 2009-8-11 11:32:55 | 显示全部楼层
能不能不调用豆瓣,而是用HOME自己的数据库?
回复

使用道具 举报

 楼主| viswow 发表于 2009-8-13 09:27:56 | 显示全部楼层
5# jackie


这个就是先调豆瓣,然后把信息存到自己的数据库。当然只是村了图片和名字。更多的信息可以通过API实现,但是API有链接次数的限制。
回复

使用道具 举报

luoguibin 发表于 2009-8-13 15:43:43 | 显示全部楼层
牛人。支持楼主
回复

使用道具 举报

luoguibin 发表于 2009-8-13 15:44:04 | 显示全部楼层
在弄个开心网,白社会,校内的,
回复

使用道具 举报

七秒钟 发表于 2009-8-13 19:19:46 | 显示全部楼层
这个代码 真看得头大
回复

使用道具 举报

jackie 发表于 2009-8-17 17:35:46 | 显示全部楼层
5# jackie


这个就是先调豆瓣,然后把信息存到自己的数据库。当然只是村了图片和名字。更多的信息可以通过API实现,但是API有链接次数的限制。
viswow 发表于 2009-8-13 09:27

在提供的演示网站没有发现插件啊?我的意思是能否单独设立插件,让会员自己创建加入书,电影,音乐数据库。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 09:56 , Processed in 0.032176 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表