分類
Python

如何快速查找URL對應重導後的URL-使用Python

有時有些URL會因為分析, 或是廣告等原因, 需要進行重導(redirect), 然而在程式實作上, 若需要找到這個重導的結果URL, 要如何進行呢? 可以使用 requests library 的訪問連結後來取得, 程式如下:

response = requests.get('https://youtu.be/dQw4w9WgXcQ') 
print(response.url) # https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be

利用 requests.get 的結果, 再將 response 的 url 取出即可.

參考資料:

https://stackoverflow.com/questions/36070821/how-to-get-redirect-url-using-python-requests

分類
Python

使用WordPress posts API新增文章(使用Python)

如何使用 WordPress posts API 來新增文章呢?

可以先參考官方資料:

https://developer.wordpress.org/rest-api/reference/posts/#create-a-post

而 API的位置在: https://{hostname}/wp/v2/posts

而新增一篇文章的方式有了這些資料就可以很快速地建立起來, 另外我們還需要先有一個 application password 來進行驗證才行, 在 WordPress 5.6 版本起, 可以在使用者下建立 application password, 所以可以透過這個方式來進行驗證, 可以參考這裡:

https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/

分類
Python

如何在repl.it上執行flask並啟動瀏覽器預覽

Flask, 一個 python 上的輕量 web server:

https://palletsprojects.com/p/flask/

可以直接在 repl.it 上執行一個 flask 測試環境嗎? 是可以的, 而且很方便. 我們可以先參考官方的資料 flask quick start:

https://flask.palletsprojects.com/en/2.0.x/quickstart/

程式碼為:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

https://repl.it/ 上建立一個 python 專案, 並且輸入上面的程式碼, 按下執行, 就會開始編譯與執行, 不過什麼事也不會發生, console 又會回到  > 的提示符號.

分類
Python

[Python]計算地球上兩個座標點距離

有兩點座標在地球表面上, 要計算兩點的距離, 會用到 haversine (半正矢公式)來進行計算.

其中 Haversine 公式就是用來計算這個球面上的大圓距離, 公式如下:

利用這個公式, 可以建立一個 python function (半徑為地球半徑: 6371km):

import numpy as np

def haversine_distance(lat1, lon1, lat2, lon2):
  r = 6371
  phi1 = np.radians(lat1)
  phi2 = np.radians(lat2)
  delta_phi = np.radians(lat2 - lat1)
  delta_lambda = np.radians(lon2 - lon1)
  a = np.sin(delta_phi / 2)**2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2)**2
  res = r * (2 * np.arctan2(np.sqrt(a), np.sqrt(1 -a)))
  return np.round(res, 2)

不過其實 python 原本就有函數庫: haversine 也可以直接引用:

import haversine as hs
loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)

(上面預設單位就是 km 了)

程式碼範例與執行結果請參考:

https://colab.research.google.com/drive/1Tap7kaY-yG09OvpJKhja9ni2T8yMdxJZ?usp=sharing

 

參考資料:

https://towardsdatascience.com/heres-how-to-calculate-distance-between-2-geolocations-in-python-93ecab5bbba4

https://towardsdatascience.com/calculating-distance-between-two-geolocations-in-python-26ad3afe287b

 

 

 

分類
Python

[Python]中油油價取得

來寫個中油油價取得.

不過一開始原以為這頁是利用靜態的內容產出的 table:

https://www.cpc.com.tw/historyprice.aspx?n=2890

利用 beautifulsoup 時, 使用 selector 雖然可以找到對應的 element, (table#tbHistoryPrice), 但找不到該 table 以下的 tr, td 對 element, 所以無法透過 select 解析並取出資料.

於是仔細看了一下 html source code, 發現原來只有一個空的 table, 而沒有內容, 而表格內容利用是 javascript 動態生成的, 而資料來源仍為靜態的 javascript 中的變數 (pieSeries), 這樣就好解決了.

分類
Python

Azure也有Jupyter Notebooks線上跑Python

之前使用 google colab 的 python 線上環境後, 現在 M$ Azure 也有對應的環境了:

https://notebooks.azure.com/

一樣免費線上使用, 把之前的 factorial 程式放上去做個小範例:

https://notebooks.azure.com/timhuang/libraries/myprojects

請自行執行 factorial.ipynb 即可. 這樣在 Google 與 Azure 上都有方便好用的 notebooks 可用了.

分類
Python

階乘從1乘到99999的位數

階乘(Factorial)是從1 x 2 x 3 x …. x n 記作 n!

其中比較特別的是 0! = 1, 原因為 n! = n x (n-1)! 而 1! = 1 = 1 x 0! 所以定義了 0! = 1

不過今天不是要談這個, 而是要用程式計算 n! 的確實值, 用什麼程式語言可以做到呢? Python3

來看看程式吧:

p = 1
for i in range(1,100000):
  p *= i
print(p)
print(len(str(p)))

根據 Python 算出來的結果為 28242294079603478742934…….
共有 456569 位數.

厲害的地方是 Python 3 沒有位數的限制, 可以算出這麼多位, 真的太強了呢. 有興趣的朋友可以線上執行:

https://colab.research.google.com/drive/1ayDGtmAiWYRzhPXOUc_uefvQD8RXvIp_

以上為使用 Google colaboratory 服務執行. 記得要使用 Python 3 就沒有位數上限(有的話是在記憶體上限, Python 2則有位數的上限)

[2018/5/18 12:12]
補充一下, 使用 python 內建數學函數庫的方式:

import math  
p = math.factorial(99999)  
print(p)  
print(len(str(p)))  
type(p)

線上執行:

https://colab.research.google.com/drive/1_n9r6gq-p-7qoT6wjeiTVsnntwktaj8q

當然, 結果還是一樣的.