神箭手 爬虫操作(1)
今天有一個任務,是要將微博用戶的昵稱從數據庫導入到神箭手中。
以前一直是手動操作,現在有一個需求是要直接導入到設置中。
數據庫使用的是mysql,數據庫連接使用的是JDBCtemplate,使用spring構建,還要用到神箭手的SDK。
之前沒有接觸過JDBCtemplate,一直使用的是JPA和Mybatis,所以趁著這個機會,學習一個JDBCtemplate。
?
?
一、大體框架
1.要利用JdbcTemplate,首先要添加Spring依賴。用quickstart模板創建Maven項目,在pom.xml中添加Spring依賴;
2.創建微博用戶類(數據傳遞類),描述微博用戶信息;
3.創建數據操作接口,規定需要哪些方法來操作數據,增、改各一種方法,刪、查各4中方法;
4.創建數據操作類,實現數據操作接口。
?
1. ①創建maven項目,增加pom依賴:
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.8.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.8.RELEASE</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>② Spring配置數據庫:
(1)配置db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT username=root password=root initialSize=3 maxActive=10遇到問題:報一個找不到時區的錯誤,不知道為什么,解決方法是在url中加上時區設置。
注意:修改mysql的賬號密碼
(2)配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd"><!--<context:property-placeholder location="classpath:db.properties"/>--><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="file:config/db.properties"/></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="username" value="${username}"></property><property name="password" value="${password}"></property><property name="url" value="${url}"></property><property name="driverClassName" value="${driver}"></property><property name="initialSize" value="${initialSize}"></property><property name="maxActive" value="${maxActive}"></property></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean> </beans>注意:要修改location的路徑。
配置文件就配置完了。
?
③創建WeibaoUser類,用于描述,設置get set 方法 和構造方法。
package add.users;import java.util.Date;public class WeiboUser {private long id;private long sysUserId;private long cId;private long mBlogUserId;private String userName;private String url;private String urlMd5;private boolean siteType;private boolean status;private String insertTime;private String updateTime;/*** 構造方法*/public WeiboUser() {}public WeiboUser(long id, String userName, boolean siteType, boolean status) {this.id = id;this.userName = userName;this.siteType = siteType;this.status = status;}public WeiboUser(long id, long sysUserId, long cId, long mBlogUserId, String userName,String url, String urlMd5, boolean siteType, boolean status, String insertTime, String updateTime) {this.id = id;this.sysUserId = sysUserId;this.cId = cId;this.mBlogUserId = mBlogUserId;this.userName = userName;this.url = url;this.urlMd5 = urlMd5;this.siteType = siteType;this.status = status;this.insertTime = insertTime;this.updateTime = updateTime;}public long getId() {return id;}public void setId(long id) {this.id = id;}public long getSysUserId() {return sysUserId;}public void setSysUserId(long sysUserId) {this.sysUserId = sysUserId;}public long getcId() {return cId;}public void setcId(long cId) {this.cId = cId;}public long getmBlogUserId() {return mBlogUserId;}public void setmBlogUserId(long mBlogUserId) {this.mBlogUserId = mBlogUserId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUrlMd5() {return urlMd5;}public void setUrlMd5(String urlMd5) {this.urlMd5 = urlMd5;}public boolean isSiteType() {return siteType;}public void setSiteType(boolean siteType) {this.siteType = siteType;}public boolean isStatus() {return status;}public void setStatus(boolean status) {this.status = status;}public String getInsertTime() {return insertTime;}public void setInsertTime(String insertTime) {this.insertTime = insertTime;}public String getUpdateTime() {return updateTime;}public void setUpdateTime(String updateTime) {this.updateTime = updateTime;} }④創建數據傳遞接口,規定操作數據的方法
package add.users.dao;import add.users.WeiboUser; import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;public interface BaseJdbcTemplate {//private JdbcTemplate template;//public abstract boolean addUser(WeiboUser user);WeiboUser queryUserById(long id);List<WeiboUser> queryUsers(); }⑤.創建數據傳遞類,實現數據操作(目前只使用到獲得數據,增刪改查以后補上)這是根據ID查一行和查全部行
package add.users;import add.users.dao.BaseJdbcTemplate; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;public class JdbcTemplateImpl implements BaseJdbcTemplate {private ApplicationContext apc = null;private JdbcTemplate jdbcTemplate = null;public JdbcTemplateImpl(){apc = new FileSystemXmlApplicationContext(new String[]{"config/applicationContext.xml"});jdbcTemplate =apc.getBean("jdbcTemplate", JdbcTemplate.class);}// public boolean addUser(WeiboUser user) { // return false; // }public WeiboUser queryUserById(long id) {String sql = "SELECT id, cid, sys_user_id, mblog_userid, url, url_md5, insert_time, update_time, " +"mblog_user_name, site_type, status FROM mblog_user_config WHERE id=?";WeiboUser user = null;user = jdbcTemplate.queryForObject(sql, new QueryUserRowMapper(), id);return user;}public List<WeiboUser> queryUsers() {String sql = "SELECT * FROM mblog_user_config";//WeiboUser user = null;List<WeiboUser> users = null;users = jdbcTemplate.query(sql, new QueryUserRowMapper());return users;} }?
提取出的RowMapper實現類:(獲取全屬性數據,指定數據獲取暫時沒有實現)
package add.users;import org.springframework.jdbc.core.RowMapper;import java.sql.ResultSet; import java.sql.SQLException;public class QueryUserRowMapper implements RowMapper<WeiboUser> {public WeiboUser mapRow(ResultSet resultSet, int rowNum) throws SQLException {WeiboUser user = new WeiboUser(resultSet.getLong("id"),resultSet.getString("mblog_user_name"),resultSet.getBoolean("site_type"),resultSet.getBoolean("status"));user.setcId(resultSet.getLong("cid"));user.setmBlogUserId(resultSet.getLong("mblog_userid"));user.setUrl(resultSet.getString("url"));user.setUrlMd5(resultSet.getString("url_md5"));user.setSysUserId(resultSet.getLong("sys_user_id"));user.setInsertTime(resultSet.getDate("insert_time").toString());user.setUpdateTime(resultSet.getDate("update_time").toString());return user;} }簡單的test一下:
import java.util.List;public class test1 {public static void main(String[] args) throws AWTException {JdbcTemplateImpl jdbcTemplate = new JdbcTemplateImpl();List<WeiboUser> users = jdbcTemplate.queryUsers();for(WeiboUser user:users){if(user.isSiteType()&&user.isStatus())System.out.println(user.getUserName());}} }控制臺輸出數據:
?
jdbc配置連接完成。
?
下一步是將數據上傳到神箭手的?新浪微博用戶昵稱或用戶ID或關鍵字或話題 框中。
根據神箭手的java SDK,首先是在pom中引入神箭手的依賴,然后配置賬號密鑰,然后就是自定義設置。
①在pom中引入
<dependency><groupId>io.shenjian.sdk</groupId><artifactId>java-sdk</artifactId><version>1.0.4</version></dependency>②配置連接,配置stop和start
package add.users;import io.shenjian.sdk.ShenjianClient; import io.shenjian.sdk.ShenjianException; import io.shenjian.sdk.model.*;public class shanjianshouConnect {String userKey = "<your user_key>";String userSecret = "<your user_secret>";ShenjianClient client = new ShenjianClient(userKey, userSecret);public void stopCrawler(){try{int crawlerId = 3365960;client.stopCrawler(crawlerId);} catch(ShenjianException e){e.printStackTrace();}}public boolean startCrawler(){try {/* 此處填寫要操作的爬蟲的ID */int crawlerId = 3365960;client.startCrawler(crawlerId);} catch (ShenjianException e) {e.printStackTrace();}return true;} }③使用ShenjianClient類中的configCrawlerCustom方法上傳名字
package add.users;import io.shenjian.sdk.ShenjianClient; import io.shenjian.sdk.ShenjianException; import io.shenjian.sdk.model.Webhook;import java.util.HashMap; import java.util.List; import java.util.Map;public class addUserToSjs {shanjianshouConnect connect = new shanjianshouConnect();public boolean addUser(){JdbcTemplateImpl jdbcTemplate = new JdbcTemplateImpl();List<WeiboUser> userList = jdbcTemplate.queryUsers();StringBuffer sb = new StringBuffer("");for(WeiboUser user:userList){if(user.isSiteType()&&user.isStatus()){sb.append(user.getUserName());sb.append(" ");}}String totalUSers = sb.toString();String[] users = totalUSers.split(" ");try {int crawlerId = 3365960;Map<String, Object> configMap = new HashMap<String, Object>();configMap.put("keywordsOrNames", new String[]{"黃磊微博"});//configMap.put("keywordsOrNames", users);connect.client.configCrawlerCustom(crawlerId, configMap);return true;} catch (ShenjianException e) {e.printStackTrace();return false;}}public void getWebHook(){ShenjianClient client = new ShenjianClient(connect.userKey, connect.userSecret);try {/* 此處填寫要操作的爬蟲的ID */int crawlerId = 3365960;Webhook webhookInfo = client.getWebhookInfo(crawlerId);System.out.println("Webhook URL : " + webhookInfo.getUrl());System.out.println("Events : ");for (int i = 0; i < webhookInfo.getEvents().length; i++){System.out.println(i+1 + webhookInfo.getEvents()[i]);}} catch (ShenjianException e) {e.printStackTrace();}}}注意:上傳格式為數組,關鍵字是keywordsOrNames
關鍵字在:
?
然后進行測試:
package add.users;import io.shenjian.sdk.ShenjianException; import io.shenjian.sdk.model.AppStatus;import java.awt.*; import java.util.List;public class test1 {public static void main(String[] args) throws AWTException {addUserToSjs addUser = new addUserToSjs(); // addUser.addUser();Robot r = new Robot();shanjianshouConnect connect = new shanjianshouConnect();//AppStatus status = connect.client.getCrawlerStatus(3365960);addUser.addUser();} }注意,添加完成后需要重啟爬蟲服務,才能配置成功
然后進入神箭手查看設置:
配置成功
?
?
參考:
https://blog.csdn.net/u010004204/article/details/76222442? ? ? ?JDBC
https://docs.shenjian.io/develop/platform/sdk/sdk-java.html? ? ? ?神箭手
總結
以上是生活随笔為你收集整理的神箭手 爬虫操作(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付可能改变的六大行业
- 下一篇: 成年人改名字要哪些步骤和手续?