個人網站首頁搭建記錄

来源:http://www.cnblogs.com/qingguo/archive/2016/08/29/5819871.html
-Advertisement-
Play Games

簡單記錄下網站首頁的搭建過程。 背景 自從網站功能變數名稱備案成功下來,一直以來都沒想好首頁應該怎麼寫。其實不是沒想好,而是沒有準備好首頁的多張大背景圖片應該存放在那,畢竟是最廉價的雲伺服器,應該本著勤儉持家的理念,能省就省嘛。不過還好, "bing中文搜索" 官網的背景圖片每天都會更新,於是萌生出了用no ...


簡單記錄下網站首頁的搭建過程。

背景

自從網站功能變數名稱備案成功下來,一直以來都沒想好首頁應該怎麼寫。其實不是沒想好,而是沒有準備好首頁的多張大背景圖片應該存放在那,畢竟是最廉價的雲伺服器,應該本著勤儉持家的理念,能省就省嘛。不過還好,bing中文搜索官網的背景圖片每天都會更新,於是萌生出了用nodejs爬別人圖片的方法~

環境準備

首先,需要給伺服器安裝nodejs,centOS下通過yum install nodejs方式安裝的nodejs是0.10版本的,根本無法寫es6代碼。沒辦法,只能通過源碼安裝了

wget http://nodejs.org/dist/v4.5.0/node-v4.5.0.tar.gz
tar -zxvf node-v4.5.0.tar.gz
cd node-v4.5.0
./configure
make
make install

ps:過程中如果報找不到g++編譯器,則請先安裝g++yum install gcc-c++
輸入node -v檢驗是否安裝成功
這裡再順便提一下安裝npm的方法吧:
curl https://npmjs.com/install.sh | sudo sh
輸入npm -v檢驗是否安裝成功

爬圖片

咳咳,接下來說到重點了,準備爬cn.bing.com網站的背景圖片。

第一步

進入bing中文網址,cmd+alt+i打開開發者工具選項,Network選項,cmd+r刷新網頁,找到網站的背景圖片Ajax選項,這就是我們要找的Ajax請求url

返回的結果如下所示

第二步

github上有很多開源的nodeje抓包庫,如superagent
而這次我所使用的是nodejs原生api
http.get(url, (res)=>{}): get請求
https.get(url, (res)=>{}): https方式
ps: 其實上面兩種都是http(s).request(options, (res)=>{})的GET方式簡化版,只是因為當前大部分網站都是GET請求方式。
通過上面的圖片,我們此處使用http.get():

const http = require('http');
const ajaxUrl = 'http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1';
http.get(ajaxUrl, (res) => {
    res.on('data', (d) => {
        console.log(d)
    })
})

此處終端的列印出來的是buffer對象,所以我們需要將其轉為字元串,然後轉為json對象取到需要的圖片url,代碼如下:

const json = JSON.parse(d.toString());
const src = json.images[0].url;

上面中的src就是我們需要的圖片url地址。

第三步

通過以上方式,雖然我們獲取到了目標圖片的url,但如何把它應用到首頁還是個問題。
本人採取的方法是通過nodejs啟動一個服務,返回目標字元串background-image:url(' + src + '),首頁通過ajax請求之後添加到body的style對象上。
查看效果:https://qingguoing.com:3000
等等,有個坑,首頁是通過nginx跑在80埠,而nodejs服務是跑在3000埠,於是就涉及到ajax跨域的問題。解決方法也很簡單,nodejs設置返回頭Access-Control-Allow-Origin: *。所以nodejs最終代碼如下所示:

const https = require('https');
const http = require('http');
const fs = require('fs');
const options = {
        key: fs.readFileSync('./ssl/privkey1.pem'),
        cert: fs.readFileSync('./ssl/fullchain1.pem')
};

const ajaxUrl = 'http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1';

https.createServer(options, function(request, response) {
        response.writeHead(200, {
                'Content-Type': 'text/html',
                'Access-Control-Allow-Origin': 'https://qingguoing.com'
        });
        http.get(ajaxUrl, (res) => {
                res.on('data', (d) => {
                        const json = JSON.parse(d.toString());
                        const url = json.images[0].url;
                        response.write('background-image:url('+ url +')');
                        response.end();
                })
        })
}).listen(3000);
console.log('server is listening on the port 3000');

ps1: 個人網站採用的是https鏈接,ssl證書是通過letsencrypt免費生成。
ps2: ajax跨域頭只設置了個人網站的首頁,所以大家如果想按我這種窮屌絲方式爬去圖片,還是去爬微軟大廠的吧。既然都看到這了,相信對您來說,這些都是小菜一碟

最後

最後當然就是運行node程式了。不過如果你像我一樣,通過終端命令遠程連接到伺服器端,那麼你應該按照如下方式執行node命令:
node app.js&
此時開啟的服務是後臺跑起的,直接退出並不會終止已跑起的node程式


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 此第一次接觸Mybatis框架確實是有點不適應,特別是剛從Hibernate框架轉轉型過來,那麼為什麼要使用Mybatis框架,Mybatis框架和Hibernate框架又有什麼異同呢? 這個問題在我的另一篇blogs中有專門的講解,今天我主要是帶著大家來探討一下如何簡單的使用Mybatis這個框架 ...
  • 做為程式員,一直以來沒有自己正式的博客,表示也挺慚愧。做為開發這麼多年,積累實在太少。 現在我要做的,是把平時點滴記錄下來,堅持下去。給自己下達的硬性指標現在是一周至少一篇技術博客吧。 最近沒有研究什麼新的技術,這周的這一篇,姑且先記錄一下現在正在刷的書《JavaScript高級程式設計》吧。 這本... ...
  • × 目錄 [1]特征 [2]屬性 [3]方法 前面的話 元素的特性在DOM中以Attr類型表示,從技術角度講,特性是存在於元素的attributes屬性中的節點。儘管特性是節點,但卻不是DOM節點樹的一部分。本文將詳細介紹該部分內容 特征 特性節點的三個node屬性————nodeType、node ...
  • 讀完 O’Reilly Media 出版的 Web Audio API 第一章對基礎部分做了一些筆記和整理。 ...
  • 1.undefined undefined在js中並不是關鍵字/保留字,因此在IE5.5~8中可以對undefined賦值,但是在IE9以上,對其賦值是無效的 在IE5.5~8中: undefined 1 undefined number 在IE9以上: undefined undefined un ...
  • 原型陷阱: 在處理原型問題上時,我們要註意兩種行為。 1. 當我們對原型對象執行完全替換的時候,有可能會觸發原型鏈的某種異常。 2. prototype.constructor 屬性是不可靠的。 下麵,我們新建一個構造函數,並創建兩個對象: 即使在對象she1和she2對象被創建之後,我們仍然可以對 ...
  • 面向對象 一、編程範式: 1.命令式編程,2.聲明式 命令式編程的思想:面向過程,面向對象。聲明式的思想:DSL(領域特定語言) 命令式編程的定義:告訴電腦以什麼指令來執行代碼。註重中間過程。 聲明式的定義:告訴電腦想要什麼結果就讓電腦自己去執行。不需要關心過程。 面向過程:一步一步的向下執行 ...
  • 一,文本格式化:此例演示如何在一個 HTML 文件中對文本進行格式化。 效果如下: 二,預格式文本:此例演示如何使用 pre 標簽對空行和空格進行控制。 效果如下: 三,“電腦輸出”標簽:此例演示不同的“電腦輸出”標簽的顯示效果。 效果如下: 四,地址:此例演示如何在 HTML 文件中寫地址。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...