- 浏览: 536430 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
飞天奔月:
public List<String> gener ...
实践中的重构30_不做油漆匠 -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道public class A {
...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在世界的中心呼喚愛 写道在classB ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
在世界的中心呼喚愛 写道在classB的finalize上打断 ...
深入理解ReferenceQueue GC finalize Reference -
在世界的中心呼喚愛:
iteye比较少上,如果可以的话,可以发e-mail交流:ch ...
深入理解ReferenceQueue GC finalize Reference
下载的电影过多,大把的时间花在到底要看什么电影上。
于是写了一个小程序,可以自动扫描电影在豆瓣的评分,并排序。
程序说明:
1 使用了反射和自定义classloader调用main方法,使得命令行不用指定jar包。
2 使用了org.json包调用豆瓣API。
3 使用了多线程控制调用豆瓣API的频率。
4 使用了配置文件控制程序的运行。
其中
WordIgnoreInFilmTitle配置了电影名称中被替换为空字符串的关键字。
SuffixOfFiles配置了可以处理的视频格式。
IgnoreSuffixOfFiles配置了不可以处理的文件格式。
5 为了减少对豆瓣API的调用次数,对于相似的电影名称进行了处理。
6 日志可以修改log4jconfig.xml控制。
7 结果可以在biz.log中查看。
本机跑结果如下:
INFO - 94 美丽人生
INFO - 93 阿甘正传
INFO - 91 天堂电影院
INFO - 91 鬼子来了
INFO - 91 搏击俱乐部
INFO - 91 海上钢琴师
INFO - 91 两杆大烟枪
INFO - 91 黄金三镖客
INFO - 91 三傻大闹宝莱坞
INFO - 90 指环王3:王者无敌
INFO - 90 美国往事
INFO - 90 教父2
INFO - 90 少年派的奇幻漂流
INFO - 89 楚门的世界
INFO - 89 上帝之城
INFO - 89 西游记大结局之仙履奇缘
INFO - 89 活着
INFO - 89 泰坦尼克号
INFO - 89 钢琴家
INFO - 88 指环王1:魔戒再现
INFO - 88 指环王2:双塔奇兵
INFO - 88 低俗小说
INFO - 88 天使爱美丽
INFO - 88 与狼共舞
INFO - 88 西游记第一百零一回之月光宝盒
INFO - 88 地球上的星星
INFO - 88 让子弹飞
INFO - 88 精英部队2:大敌当前
INFO - 87 大鱼
INFO - 87 黑客帝国
INFO - 87 剪刀手爱德华
INFO - 87 拯救大兵瑞恩
INFO - 87 芙蓉镇
INFO - 87 狮子王
INFO - 87 致命魔术
INFO - 86 猜火车
INFO - 86 纵横四海
INFO - 86 杀人回忆
INFO - 86 绿里奇迹
INFO - 86 西伯利亚的理发师
INFO - 86 喜宴
INFO - 86 V字仇杀队
INFO - 86 谍影重重3
INFO - 86 哈利·波特与死亡圣器(下)
INFO - 86 老爷车
INFO - 86 燃情岁月
INFO - 85 非常嫌疑犯
INFO - 85 洛城机密
INFO - 85 西西里的美丽传说
INFO - 85 费城故事
INFO - 85 末代皇帝
INFO - 85 美国X档案
INFO - 85 全金属外壳
INFO - 85 偷拐抢骗
INFO - 85 人工智能
INFO - 85 记忆碎片
INFO - 85 盲井
INFO - 85 赛德克·巴莱
INFO - 84 终结者2
INFO - 84 英国病人
INFO - 84 勇闯夺命岛
INFO - 84 加勒比海盗
INFO - 84 时时刻刻
INFO - 84 两小无猜
INFO - 84 黑天鹅
INFO - 84 朗读者
INFO - 84 这个男人来自地球
INFO - 84 蝙蝠侠:黑暗骑士崛起
INFO - 84 11度青春之《老男孩》
INFO - 83 歌剧魅影
INFO - 83 黑鹰坠落
INFO - 83 爱情是狗娘
INFO - 83 现代启示录
INFO - 83 不可饶恕
INFO - 83 荒岛余生
INFO - 83 谍影重重2
INFO - 83 了不起的狐狸爸爸
INFO - 83 凯尔经的秘密
INFO - 83 谜一样的双眼
INFO - 82 角斗士
INFO - 82 星球大战
INFO - 82 一级恐惧
INFO - 82 星球大战2:帝国反击战
INFO - 82 落水狗
INFO - 82 秋天的童话
INFO - 82 黑客帝国3:矩阵革命
INFO - 82 傲慢与偏见
INFO - 82 米尔克
INFO - 82 国王的演讲
INFO - 81 巴菲的奇妙命运
INFO - 81 夺宝奇兵3
INFO - 81 星球大战3:绝地归来
INFO - 81 罗塞塔
INFO - 81 喜剧之王
INFO - 81 黑客帝国2:重装上阵
INFO - 81 黑皮书
INFO - 81 霍比特人1:意外之旅
INFO - 81 碟中谍4
INFO - 81 社交网络
INFO - 81 黄海
INFO - 80 钢琴课
INFO - 80 英雄本色2
INFO - 80 小鬼当街
INFO - 80 卡特教练
INFO - 80 复仇者联盟
INFO - 80 葬礼上的死亡
INFO - 80 杀手没有假期
INFO - 80 X战警:第一战
INFO - 80 127小时
INFO - 79 苔丝
INFO - 79 大象
INFO - 79 精武英雄
INFO - 79 监狱风云
INFO - 79 星球大战前传1:幽灵的威胁
INFO - 79 九品芝麻官
INFO - 79 十二猴子
INFO - 79 鳗鱼
INFO - 79 你丫闭嘴!
INFO - 79 蝙蝠侠:侠影之谜
INFO - 79 星球大战前传3:西斯的复仇
INFO - 79 风吹麦浪
INFO - 79 四月三周两天
INFO - 79 白丝带
INFO - 79 猩球崛起
INFO - 79 大地惊雷
INFO - 79 单车少年
INFO - 78 迷失东京
INFO - 78 冰血暴
INFO - 78 樱桃的滋味
INFO - 78 夺宝奇兵
INFO - 78 国产凌凌漆
INFO - 78 华氏911
INFO - 78 加勒比海盗2:聚魂棺
INFO - 78 决战犹马镇
INFO - 78 老无所依
INFO - 78 立春
INFO - 78 人生不再重来
INFO - 77 云上的日子
INFO - 77 一条叫旺达的鱼
INFO - 77 碟中谍
INFO - 77 看得见风景的房间
INFO - 77 星球大战前传2:克隆人的进攻
INFO - 77 孔雀
INFO - 77 加勒比海盗3:世界的尽头
INFO - 77 卡波特
INFO - 77 美国黑帮
INFO - 77 潘神的迷宫
INFO - 77 孔雀王2 幻影城
INFO - 76 食神
INFO - 76 黄飞鸿之二:男儿当自强
INFO - 76 秋菊打官司
INFO - 76 毁灭之路
INFO - 76 黑社会
INFO - 76 功夫2
INFO - 76 理发师陶德
INFO - 76 看车人的七月
INFO - 76 预言者
INFO - 76 斗牛
INFO - 76 七个神经病
INFO - 75 性、谎言和录像带
INFO - 75 黄飞鸿之三:狮王争霸
INFO - 75 我的父亲母亲
INFO - 75 菊豆
INFO - 75 机械师
INFO - 75 虎胆龙威4
于是写了一个小程序,可以自动扫描电影在豆瓣的评分,并排序。
程序说明:
1 使用了反射和自定义classloader调用main方法,使得命令行不用指定jar包。
java -cp .;allen_base-1.0.jar allen.program.Driver allen.douban.main.LocalFilmRating
try { Class<?> type = myClassLoader.loadClass(mainClass); Method method = type.getMethod("main", String[].class); method.invoke(null, (Object) args0); } catch (Exception e) { throw new RuntimeException(e); }
2 使用了org.json包调用豆瓣API。
3 使用了多线程控制调用豆瓣API的频率。
private static int limitInMinutes = Config.LimitInMinutes; private static AtomicInteger invokeCounter = new AtomicInteger( limitInMinutes); private static Thread monitorThread = new Thread() { @Override public void run() { while (true) { try { Thread.sleep(60000); } catch (InterruptedException e) { System.out .println(e); } invokeCounter .set(limitInMinutes); } } };
private static void checkCounter() { int counter = invokeCounter.decrementAndGet(); if (counter >= 0) { log.debug("pass counter = " + counter); return; } else { log.debug("deny counter = " + counter); } try { Thread.sleep(1000); } catch (InterruptedException e) { log.err(e); } checkCounter(); }
4 使用了配置文件控制程序的运行。
#本地电影缓存目录。 MovieCacheDir=I:\douban_base\movie\ #本地个人缓存目录。 CelebrityCacheDir=I:\douban_base\celebrity\ #LocalFilmDirs=K:\todo,K:\allen_film #本地电影目录。可以多个目录以逗号分隔。 LocalFilmDirs=K:\download #豆瓣API的调用次数限制,每分钟。豆瓣API上面说不能超过40/min,实际上可以。 LimitInMinutes=40 #本地电影名称中需要过滤掉的字符串。 WordIgnoreInFilmTitle=BD,1280,高清,中字,CD,迅雷,下载,DVD,中英字幕,中英双字,720p #可以处理的视频后缀名称。字母小写。 SuffixOfFiles=wmv,asf,asx,rm,rmvb,mpg,mpeg,mpe,dat,vob,dv,3gp,3g2,mov,avi,mkv,mp4,m4v,flv,xv #不可以处理的文件后缀名称。字母小写。 IgnoreSuffixOfFiles=srt,torrent,idx,sub,rar,txt,jpg,zip,mp3
其中
WordIgnoreInFilmTitle配置了电影名称中被替换为空字符串的关键字。
SuffixOfFiles配置了可以处理的视频格式。
IgnoreSuffixOfFiles配置了不可以处理的文件格式。
5 为了减少对豆瓣API的调用次数,对于相似的电影名称进行了处理。
/** * 处理相似的名字。2个名字有一个字符不同,其他相同,则认为2个名字相似。 * */ public static List<String> filterSimilarName(List<String> filmNames) { if (filmNames.size() <= 1) { return filmNames; } List<String> result = new ArrayList<String>(); result.add(filmNames.get(0)); //相同字符的index。 int lastSimilarIndex = -1; for (int i = 1; i < filmNames.size(); i++) { String toHandleName = filmNames.get(i); String lastHandleName = result.get(result.size() - 1); int similarIndex = getSimilar(lastHandleName, toHandleName); if (similarIndex == -1) { if (lastSimilarIndex != -1) { lastHandleName = lastHandleName.substring(0, lastSimilarIndex) + lastHandleName.substring(lastSimilarIndex + 1); result.set(result.size() - 1, lastHandleName); } result.add(toHandleName); lastSimilarIndex = -1; } else { //不考虑连续相似的字符串,相似位置不同的情况。 lastSimilarIndex = similarIndex; } } return result; } private static int getSimilar(String str1, String str2) { if (StringUtil.isEmptyString(str1) || StringUtil.isEmptyString(str2)) { return -1; } if (str1.length() != str2.length()) { return -1; } int similarIndex = -1; int differenceCount = 0; for (int i = 0; i < str1.length(); i++) { char c1 = str1.charAt(i); char c2 = str2.charAt(i); if (c1 != c2) { differenceCount++; similarIndex = i; } } if (differenceCount == 1) { return similarIndex; } else { return -1; } }
6 日志可以修改log4jconfig.xml控制。
7 结果可以在biz.log中查看。
本机跑结果如下:
INFO - 94 美丽人生
INFO - 93 阿甘正传
INFO - 91 天堂电影院
INFO - 91 鬼子来了
INFO - 91 搏击俱乐部
INFO - 91 海上钢琴师
INFO - 91 两杆大烟枪
INFO - 91 黄金三镖客
INFO - 91 三傻大闹宝莱坞
INFO - 90 指环王3:王者无敌
INFO - 90 美国往事
INFO - 90 教父2
INFO - 90 少年派的奇幻漂流
INFO - 89 楚门的世界
INFO - 89 上帝之城
INFO - 89 西游记大结局之仙履奇缘
INFO - 89 活着
INFO - 89 泰坦尼克号
INFO - 89 钢琴家
INFO - 88 指环王1:魔戒再现
INFO - 88 指环王2:双塔奇兵
INFO - 88 低俗小说
INFO - 88 天使爱美丽
INFO - 88 与狼共舞
INFO - 88 西游记第一百零一回之月光宝盒
INFO - 88 地球上的星星
INFO - 88 让子弹飞
INFO - 88 精英部队2:大敌当前
INFO - 87 大鱼
INFO - 87 黑客帝国
INFO - 87 剪刀手爱德华
INFO - 87 拯救大兵瑞恩
INFO - 87 芙蓉镇
INFO - 87 狮子王
INFO - 87 致命魔术
INFO - 86 猜火车
INFO - 86 纵横四海
INFO - 86 杀人回忆
INFO - 86 绿里奇迹
INFO - 86 西伯利亚的理发师
INFO - 86 喜宴
INFO - 86 V字仇杀队
INFO - 86 谍影重重3
INFO - 86 哈利·波特与死亡圣器(下)
INFO - 86 老爷车
INFO - 86 燃情岁月
INFO - 85 非常嫌疑犯
INFO - 85 洛城机密
INFO - 85 西西里的美丽传说
INFO - 85 费城故事
INFO - 85 末代皇帝
INFO - 85 美国X档案
INFO - 85 全金属外壳
INFO - 85 偷拐抢骗
INFO - 85 人工智能
INFO - 85 记忆碎片
INFO - 85 盲井
INFO - 85 赛德克·巴莱
INFO - 84 终结者2
INFO - 84 英国病人
INFO - 84 勇闯夺命岛
INFO - 84 加勒比海盗
INFO - 84 时时刻刻
INFO - 84 两小无猜
INFO - 84 黑天鹅
INFO - 84 朗读者
INFO - 84 这个男人来自地球
INFO - 84 蝙蝠侠:黑暗骑士崛起
INFO - 84 11度青春之《老男孩》
INFO - 83 歌剧魅影
INFO - 83 黑鹰坠落
INFO - 83 爱情是狗娘
INFO - 83 现代启示录
INFO - 83 不可饶恕
INFO - 83 荒岛余生
INFO - 83 谍影重重2
INFO - 83 了不起的狐狸爸爸
INFO - 83 凯尔经的秘密
INFO - 83 谜一样的双眼
INFO - 82 角斗士
INFO - 82 星球大战
INFO - 82 一级恐惧
INFO - 82 星球大战2:帝国反击战
INFO - 82 落水狗
INFO - 82 秋天的童话
INFO - 82 黑客帝国3:矩阵革命
INFO - 82 傲慢与偏见
INFO - 82 米尔克
INFO - 82 国王的演讲
INFO - 81 巴菲的奇妙命运
INFO - 81 夺宝奇兵3
INFO - 81 星球大战3:绝地归来
INFO - 81 罗塞塔
INFO - 81 喜剧之王
INFO - 81 黑客帝国2:重装上阵
INFO - 81 黑皮书
INFO - 81 霍比特人1:意外之旅
INFO - 81 碟中谍4
INFO - 81 社交网络
INFO - 81 黄海
INFO - 80 钢琴课
INFO - 80 英雄本色2
INFO - 80 小鬼当街
INFO - 80 卡特教练
INFO - 80 复仇者联盟
INFO - 80 葬礼上的死亡
INFO - 80 杀手没有假期
INFO - 80 X战警:第一战
INFO - 80 127小时
INFO - 79 苔丝
INFO - 79 大象
INFO - 79 精武英雄
INFO - 79 监狱风云
INFO - 79 星球大战前传1:幽灵的威胁
INFO - 79 九品芝麻官
INFO - 79 十二猴子
INFO - 79 鳗鱼
INFO - 79 你丫闭嘴!
INFO - 79 蝙蝠侠:侠影之谜
INFO - 79 星球大战前传3:西斯的复仇
INFO - 79 风吹麦浪
INFO - 79 四月三周两天
INFO - 79 白丝带
INFO - 79 猩球崛起
INFO - 79 大地惊雷
INFO - 79 单车少年
INFO - 78 迷失东京
INFO - 78 冰血暴
INFO - 78 樱桃的滋味
INFO - 78 夺宝奇兵
INFO - 78 国产凌凌漆
INFO - 78 华氏911
INFO - 78 加勒比海盗2:聚魂棺
INFO - 78 决战犹马镇
INFO - 78 老无所依
INFO - 78 立春
INFO - 78 人生不再重来
INFO - 77 云上的日子
INFO - 77 一条叫旺达的鱼
INFO - 77 碟中谍
INFO - 77 看得见风景的房间
INFO - 77 星球大战前传2:克隆人的进攻
INFO - 77 孔雀
INFO - 77 加勒比海盗3:世界的尽头
INFO - 77 卡波特
INFO - 77 美国黑帮
INFO - 77 潘神的迷宫
INFO - 77 孔雀王2 幻影城
INFO - 76 食神
INFO - 76 黄飞鸿之二:男儿当自强
INFO - 76 秋菊打官司
INFO - 76 毁灭之路
INFO - 76 黑社会
INFO - 76 功夫2
INFO - 76 理发师陶德
INFO - 76 看车人的七月
INFO - 76 预言者
INFO - 76 斗牛
INFO - 76 七个神经病
INFO - 75 性、谎言和录像带
INFO - 75 黄飞鸿之三:狮王争霸
INFO - 75 我的父亲母亲
INFO - 75 菊豆
INFO - 75 机械师
INFO - 75 虎胆龙威4
- pub_douban.zip (6.5 MB)
- 下载次数: 49
评论
4 楼
a90120411
2014-01-28
正在写一个Chrome的小插件。谢谢博主分享。
3 楼
zhang_xzhi_xjtu
2013-07-14
我以前跑,也是经常被封ip的,你可以把每分钟抓取的次数限制调低一点。
JSONObject["subjects"]
这个是由于返回格式不符合导致的。
JSONObject["subjects"]
这个是由于返回格式不符合导致的。
2 楼
mmxymm
2013-07-12
另外一旦出现这个问题后,好像要过好久才能再次运行。我怀疑是豆瓣暂时屏蔽了IP访问吧。
能不能吧豆瓣的数据库抓下,然后在本地弄呢。。。瞎想中。
能不能吧豆瓣的数据库抓下,然后在本地弄呢。。。瞎想中。
1 楼
mmxymm
2013-07-12
你好,真的很好用哈。跟博主一样也是选电影花太久时间,真正看上的时候已经很晚了。
不过,我发现一旦目录里的文件过多(比如大于30个),我这里就会出现error,如下。不知博主有无时间能debug看看,呵呵。谢谢啦。
D:\pub_douban>java -cp .;allen_base-1.0.jar allen.program.Driver allen.douban.m
ain.LocalFilmRating
Exception in thread "main" java.lang.RuntimeException: java.lang.reflect.Invocat
ionTargetException
at allen.program.Driver.main(Driver.java:36)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at allen.program.Driver.main(Driver.java:34)
Caused by: org.json.JSONException: JSONObject["subjects"] not found.
at org.json.JSONObject.get(JSONObject.java:472)
at org.json.JSONObject.getJSONArray(JSONObject.java:553)
at allen.douban.handler.OnlineDataSearcher.searchMovieList(OnlineDataSea
rcher.java:123)
at allen.douban.handler.OnlineDataSearcher.searchMovie(OnlineDataSearche
r.java:138)
at allen.douban.handler.OnlineDataSearcher.searchMovieWithoutSave(Online
DataSearcher.java:75)
at allen.douban.main.LocalFilmRating.main(LocalFilmRating.java:30)
... 5 more
D:\pub_douban>pause
Press any key to continue . . .
不过,我发现一旦目录里的文件过多(比如大于30个),我这里就会出现error,如下。不知博主有无时间能debug看看,呵呵。谢谢啦。
D:\pub_douban>java -cp .;allen_base-1.0.jar allen.program.Driver allen.douban.m
ain.LocalFilmRating
Exception in thread "main" java.lang.RuntimeException: java.lang.reflect.Invocat
ionTargetException
at allen.program.Driver.main(Driver.java:36)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at allen.program.Driver.main(Driver.java:34)
Caused by: org.json.JSONException: JSONObject["subjects"] not found.
at org.json.JSONObject.get(JSONObject.java:472)
at org.json.JSONObject.getJSONArray(JSONObject.java:553)
at allen.douban.handler.OnlineDataSearcher.searchMovieList(OnlineDataSea
rcher.java:123)
at allen.douban.handler.OnlineDataSearcher.searchMovie(OnlineDataSearche
r.java:138)
at allen.douban.handler.OnlineDataSearcher.searchMovieWithoutSave(Online
DataSearcher.java:75)
at allen.douban.main.LocalFilmRating.main(LocalFilmRating.java:30)
... 5 more
D:\pub_douban>pause
Press any key to continue . . .
发表评论
-
可以查看java对象的MemoryUtil简介
2014-09-14 20:56 939MemoryUtil 关于java对象内存的基本知识,请参考 ... -
[gc] gcviewer v0.3 一个解析CMS GC日志的GUI程序
2014-09-07 22:58 1199GCviewer https://github.com/z ... -
encodechecker v0.5 文件编码自动检测及编码转换
2014-04-15 00:43 2307由于很多软件都不能准确自动识别文件编码,因此写了个文件编码识别 ... -
encodechecker v0.2 文件编码自动检测及编码转换
2012-06-03 12:57 6593由于很多软件都不能准确自动识别文件编码,因此写了个文件编码识别 ... -
统计代码的小工具CodeLineCounter3.0
2010-03-13 21:28 1509改进了以前的一个代码统计工具,主要是加入ui。这样操作时比较方 ... -
一个简单的UI logger.
2010-01-24 17:24 883写Swing程序的时候,觉得看console或者文件里面的lo ... -
发一个自己写的休闲小游戏
2009-11-29 00:23 1328自己一直喜欢玩珠珠,就是把同色的球移到一排消掉的休闲小游戏. ... -
统计代码的小工具CodeLineCounter2.2
2009-09-22 23:52 3780CodeLineCounter 2.2 note. 1 ... -
统计代码的小工具CodeLineCounter2.1
2009-08-22 21:12 1411最新版本 http://zhang-xzhi-xjtu.ite ... -
统计代码的小工具CodeLineCounter2.0
2009-06-20 15:15 1500最新版本 http://zhang-xzhi-xjtu.ite ... -
统计代码的小工具CodeLineCounter1.0
2008-12-06 09:18 1501最新版本 http://zhang-xzhi-xjtu.ite ...
相关推荐
8. **网络请求**:使用`wx.request`与豆瓣API交互,获取电影数据,如电影详情、评分、评论等。 9. **状态管理**:小程序的全局状态管理,可以使用微信小程序的Page对象或自定义的State管理库。 10. **生命周期方法**...
可以使用微信小程序的view、image、text等组件构建列表结构,同时结合网络请求获取豆瓣API提供的电影数据。 电影详情页面会展示更全面的电影信息,如剧情简介、演员表、导演信息、用户评论等。通过navigator组件,...
而豆瓣电影搜索插件则是对Alfred功能的扩展,它将豆瓣电影的强大数据库集成其中,使得用户无需打开浏览器或者专门的电影应用,即可完成对电影的查找、评分、评论等操作。 首先,让我们深入了解Alfred2的豆瓣电影...
在Android开发中,豆瓣API V2是一个常用的接口,用于获取豆瓣平台上的各种数据,如书籍、电影、音乐等。这个接口返回的数据通常是以JSON(JavaScript Object Notation)格式,需要我们进行解析才能在应用程序中使用...
通过这个快应用,用户可以随时随地查找电影信息,查看评分、评论以及上映时间等。 【标签】:“JavaScript开发-混合移动开发”提示我们,该项目采用了JavaScript作为主要编程语言,同时利用了混合移动开发技术。...
用户可以通过这个小程序轻松查找电影、了解电影详情、阅读评论和评分,甚至参与讨论和分享自己的电影体验。 主要特点: 丰富的电影数据库:接入豆瓣广泛的电影数据库,提供包括新片、经典影片以及各种类型电影的...
9. **豆瓣API**:豆瓣提供了开放的API接口,允许开发者利用豆瓣的数据和服务开发第三方应用,推动了围绕豆瓣的创新生态。 10. **隐私与社区规则**:豆瓣重视用户的隐私保护,同时也有一套严格的社区规则,旨在维护...
豆瓣电影是中国知名的电影数据库和社区,用户可以查找电影评分、评论、上映日期等信息。通过这个扩展,用户无需离开浏览器就能直接查看这些信息,提高了观影决策的效率。 至于压缩包子文件的文件名称“DoubanMovie....
2. 数据请求:使用Ajax或小程序内置的wx.request方法与服务器进行数据交换,获取豆瓣API的数据。 3. 响应式设计:适配不同屏幕尺寸的设备,保证界面在各种分辨率下都能良好显示。 4. 离线缓存:利用微信小程序的本地...
因此,我们需要利用浏览器的开发者工具(如Chrome的开发者工具)来查找获取电影信息的API。一旦找到API,我们可以分析其返回的数据格式,通常是JSON。 在Python环境中,我们将使用以下主要库来实现这个爬虫: 1. `...
7. **豆瓣API**:虽然直接抓取网页是一种方法,但豆瓣也提供了API接口,允许开发者以更结构化的方式获取数据。然而,需要注意的是,豆瓣API可能有限制,例如请求频率和返回数据的数量。 为了实现豆瓣影评抓取,你...
首先,我们来了解一下什么是豆瓣API。豆瓣API是豆瓣网提供的开放接口,允许外部开发者通过HTTP协议请求获取豆瓣平台上的数据,如图书、电影、音乐等资源的相关信息。通过这个SDK,我们可以绕过复杂的API调用流程,...
在这个“微信小程序电影列表”项目中,开发者通过动态获取豆瓣电影API的数据,构建了一个展示电影列表的功能,同时结合了微信地图定位服务,为用户提供了查找附近电影院的便利。 首先,我们来详细了解微信小程序的...
核心知识点四:豆瓣API与反爬策略 豆瓣提供了一些官方API,但它们对于频繁的爬虫请求有限制。因此,大部分情况下,我们需要直接解析网页HTML。同时,要应对豆瓣的反爬策略,如验证码、IP限制等,可能需要用到随机...
3. **豆瓣API**:虽然没有明确提及,但通常爬取豆瓣数据可能会涉及到其API。豆瓣提供API供开发者获取数据,但需要注册并获得API密钥。如果项目直接爬取网页而非使用API,可能需要处理反爬虫策略,如设置User-Agent,...
7. **豆瓣API(可选)**:虽然描述中提到的是基于爬虫,但也可以考虑使用豆瓣开放API,这可能涉及到OAuth认证和JSON数据处理。 8. **模块化编程**:为了提高代码的可读性和复用性,应将功能封装成独立的函数或类。...
本文将深入探讨如何使用微信小程序平台,结合豆瓣API,开发一个包含“豆瓣电影推荐”、“豆瓣电影评分”以及“电影搜索”三大功能的应用。我们将围绕“miniprogram-1.zip”这个压缩包中的源码,详细解析其设计思路和...
调用豆瓣API需要遵循其使用规则,通常需要申请API密钥,并在请求中携带以确保合法使用。 "二维码扫描"功能则让小程序具备了扫描二维码的能力。二维码在现代生活中广泛应用,包括图书条形码、链接分享、支付码等。在...
豆瓣是一个包含电影、音乐、图书等多个领域的社区平台,其中豆瓣图书提供了丰富的图书信息,包括书名、作者、出版社、ISBN、评分、评论等。开发者通过豆瓣开放的API(Application Programming Interface)可以获取...