2019年8月26日 星期一

PHP curl 呼叫API用法

curl 是我們常見的Linux指令,主要的功能為利用URL語法在命令列下工作的檔案傳輸工具。
也常用於API的基本驗證,當然還有Postman

而在php軟體開發,呼叫API URL,php本身就提供這樣一個好用的函式庫,操作方式如下。


$url = "http://127.0.0.1:8080/api";
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'PHP Agent');
$jsonresult = curl_exec($curl_handle);
curl_close($curl_handle);

##取得json,例如json格式{'resultcode':'OK'}
$result = json_decode($jsonresult);
##取得某個json字串或變數
$result->resultcode ###此段取回的結果就是OK字串

2019年8月22日 星期四

this is incompatible with sql_mode=only_full_group_by 解決方式

當MySQL 5.7版本後,如果使用group by指令沒有包含所有查詢的欄位會出現以下錯誤訊息:

this is incompatible with sql_mode=only_full_group_by
最有效的方法為修改my.cnf,常見的路徑在/etc/my.cnf
但後續有些linux版本把設定拆開,例如ubuntu實際修改位置如下:

/etc/mysql/mysql.conf.d/mysqld.cnf
####在以下位置加入
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2019年8月20日 星期二

Python pysnmp 簡介

之前在開發Java監控Server需要用到snmp套件是使用snmp4j
在.net(C#)是使用SNMPSharpNet
今天則是記錄Python上找了一下比較方便的套件pysnmp
官方網站如下:http://snmplabs.com/pysnmp/index.html

基本的snmpget、snmpset 操作說明如下

###套件安裝
pip install pysnmp

###把snmpget包裝成一個方法呼叫

from pysnmp.hlapi import *
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto import rfc1902

ip = '127.0.0.1'
oid = "1.3.6.1.2.1.2.2.1.8.1"
result = snmpget(ip,oid)

def snmpget(ip,oid):
    errorIndication, errorStatus, errorIndex, varBinds = next(
        getCmd(SnmpEngine(),
            CommunityData('private'),
            UdpTransportTarget((ip, 161)),
            ContextData(),
            ObjectType(ObjectIdentity(oid)))
    )

    if errorIndication:
        print(errorIndication)
    elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                            errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
    else:
        for varBind in varBinds:
            return(str(varBind).split('=')[1])


###snmpset用法,此方法為一次設定兩個OID

from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto import rfc1902

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(
 cmdgen.CommunityData('private', mpModel=0),
 cmdgen.UdpTransportTarget(127.0.0.1, 161)),
 ('.1.3.6.1.2.1.0.1.1', rfc1902.Integer(1)),
 ('.1.3.6.1.2.1.0.1.2, rfc1902.Integer(1))
)


若有問題都歡迎討論,謝謝。

2019年8月19日 星期一

Python Link MSSQL use pymssql

之前有說明過,並且在實際的程式連結MSSQL資料庫使用Python模組pyodbc。

結果發現要轉移Server或是轉移到Linux上相當不方便,因為除了pip要重新安裝外還要安裝ODBC的Driver。

因此近日改為使用pymssql套件來連結。
###首先安裝pip套件
pip install pymssql

###程式使用
import pymssql

conn = pymssql.connect(server='127.0.0.1', user='username', password='password?', database='default db')  
cur = conn.cursor()

res1 = ""
res2 = ""
res3 = ""

###Insert 用法
sql = """INSERT INTO test (c1,c2,c3) VALUES ('{0}','{1}','{2}');""".format(res1,res2,res3)
        
cur.execute(sql)
conn.commit()

###Select 用法

sql = "SELECT * FROM test"
cur.execute(sql)
data = cur.fetchall()

for row in data:
    c1 = row[0]
    c2 = row[1]
    c3 = row[2]

若有任何問題都歡迎討論

2018年5月27日 星期日

PHP sqlsrv driver Error Message:Warning: sqlsrv_query() expects parameter 1

當正確下載對應的php sql server driver在windows上面後,也放到php ext資料夾。

結果卻出現Warning: sqlsrv_query() expects parameter 1,很有可能就是ODBC Driver沒裝。

ODBC Driver
https://www.microsoft.com/zh-TW/download/details.aspx?id=36434


2018年4月30日 星期一

python 安裝 TA-Lib

最近使用python做相關的財經分析,需要使用到TA-LIB該套件進行繪圖。
如果正常的python -m pip install TA-Lib
會出現以下錯誤訊息等等:
talib/_ta_lib.c(524): fatal error C1083: Cannot open include file: 'ta_libc.h': No such file or directory
雖然官網有教學如何compile解決,但方法頗為複雜
https://github.com/mrjbq7/ta-lib
最後看最簡單的方法就是下載
Microsoft Build Tools 2015
https://www.microsoft.com/en-us/download/details.aspx?id=48159
接著再重新安裝就好了

2018年4月16日 星期一

python odbc 連結 mssql

Python可以用odbc的方式來連結MS SQL,但是需要下載相關的Driver與pip安裝套件。

ODBC相關Driver
https://docs.microsoft.com/zh-tw/sql/connect/odbc/download-odbc-driver-for-sql-server

如果要引用哪個版本則選擇哪個版本的Driver(11、13、17 etc..)

python則要安裝 pyodbc

python -m install pyodbc

接著就可以使用以下的語法開始使用



conn = pyodbc.connect(
  r'DRIVER={ODBC Driver 11 for SQL Server};'
  r'SERVER=10.10.0.231;'
  r'DATABASE=dbname;'
  r'UID=username;'
  r'PWD=password'
  )

cursor = conn.cursor()

cursor.execute("DELETE FROM " + tb_name)
conn.commit()

CentOS Python 3.7 安裝方式

有些開發的程式在python 3.8的檔案套件不相容,例如pymssql,等。 所以如果不建置虛擬環境的話才特意安裝3.7版本的python 安裝流程如下 # 先進行yum套件的update yum update -y # 安裝相依性套件 yum install gcc o...