どのようにAPIを介してGoogleスプレッドシートにLinnworksからすべての在庫項目を取得するには?
数日前、私はLinnWorks(LW)とGoogleスプレッドシートを接続する簡単なスクリプトを書いた.これはLWのAPIを使用してLWからGoogleスプレッドシートにすべての在庫アイテムを取得します.スクリプトはGoogle Appsのスクリプトで書かれており、Google Workspaceの中でタスクを自動化し、Google APIを外部APIに接続するための言語です.言語は本質的に現代的なJavaScriptですが、そのサービスで主要なGoogle API(スプレッドシート、ドキュメントなど)へのアクセスを持つことの利点で.私はGoogle Appsのスクリプトについての最も好きなのは、スプレッドシートに埋め込まれている、無料でホストされ、スケジュールに実行するトリガに置くことができます.
このプロジェクトに必要なもの
LWから必要なのはAPIトークンだけです.で指定された指示を使用してAPIトークンを生成できますhelp page . 要約すると、APIトークンを取得するには、次の手順に従います. LWで開発者アカウントを作成する を使用するAPI endpoint APIトークンを得るために. LWアプリケーションを認証した後、2つの重要なキーを含む応答オブジェクトを受信している必要があります. として返されたAPIトークン これらの2つの情報をどこかにコピーしてください.次の手順で必要です.
スプレッドシートファイルを作成する 新しいシートを作成する-あなたが書くことによって新しいシートファイルを作成するために使用するきちんとした小さなトリックを使用することができます スプレッドシートで、ツール→スクリプトエディタに移動します. これは、我々がすべての我々のコードを書いているエディタです.
プロジェクトをステップへ 最初のAPI呼び出しを行い、データを取得する🤓 応答を解析し、データフィールドを取得します🦾 パースしたオブジェクトをシートにペーストする📝
1 .最初のAPI呼び出しの作成
2 - whileループ
のパラメータの一つ
レスポンスを解析する
データをシートに貼り付ける
フルスクリプト
あなたは完全なスクリプトを得ることができますmy github .
読書ありがとう.
このプロジェクトに必要なもの
LWから必要なのはAPIトークンだけです.で指定された指示を使用してAPIトークンを生成できますhelp page . 要約すると、APIトークンを取得するには、次の手順に従います.
Application Id
and Application Secret
. Token
Server
, URL文字列の作成は重要です.次のようになります.https://eu-ext.linnworks.net
スプレッドシートファイルを作成する
sheet.new
あなたのブラウザで.プロジェクトをステップへ
do - while
APIが1 API呼び出しで200のオブジェクトだけを返すので、ループはすべてのストックアイテムを得るために😟 1 .最初のAPI呼び出しの作成
function getLWStockItems(){
const URL = 'PASTE_SERVER_HERE/api/Stock/GetStockItemsFull'
const payload = {
'keyword': '',
'loadCompositeParents': 'True',
'loadVariationParents': 'False',
'entriesPerPage': '200',
'pageNumber': 1,
'dataRequirements': '[0,1,2,3,7,8]',
'searchTypes': '[0,1,2]'
}
var response = UrlFetchApp.fetch(URL, {
method: 'post',
headers: {
'Authorization': 'YOUR_LW_TOKEN'
},
'contentType': 'application/json',
'payload': JSON.stringify(payload),
muteHttpExceptions: true
})
console.log(response.getResponseCode())
console.log(response.getContentText())
}
上記の関数は200
ステータスコードと200の在庫アイテムの巨大な配列.payload
objectはリクエストの本文でAPIが受け入れるものです. UrlFetchAPP.fetch()
Google AppsスクリプトでHTTPリクエストを作成する方法です.2 - whileループ
のパラメータの一つ
payload
オブジェクトはpageNumber
. 我々はすべてのページとすべての株式の項目のオブジェクトを取得するまで、それをインクリメントするには、このページ番号フィールドを使用することができます.APIは400を返し、ループを中断します.コードは次のようになります.function getLWStockItems() {
let allProducts = []
const URL = 'PASTE_SERVER_HERE/api/Stock/GetStockItemsFull'
let startingPageNo = 1
do {
const payload = {
'keyword': '',
'loadCompositeParents': 'True',
'loadVariationParents': 'False',
'entriesPerPage': '200',
'pageNumber': startingPageNo,
'dataRequirements': '[0,1,2,3,7,8]',
'searchTypes': '[0,1,2]'
}
console.log(payload.pageNumber)
var response = UrlFetchApp.fetch(URL, {
method: 'post',
headers: {
'Authorization': 'YOUR_LW_TOKEN'
},
'contentType': 'application/json',
'payload': JSON.stringify(payload),
muteHttpExceptions: true
})
console.log(response.getResponseCode())
if (response.getResponseCode() === 200){
const jsonRes = JSON.parse(response.getContentText())
allProducts = allProducts.concat(jsonRes)
startingPageNo++
}
} while (response.getResponseCode() !== 400)
console.log('Total stock objects: ', allProducts.length)
return allProducts
}
この関数は、startingPageNo
変数.APIが次に200のステータスコードを返すならallProducts
配列が連結されます.APIが400を返すとすぐにwhile
ループブレークと我々は帰りますallProducts
配列.この時点で、我々はLWからのすべての在庫アイテムをパースし、シートに貼り付けている.レスポンスを解析する
function parseResponse(){
const stocksData = getLWStockItems()
const stockItemsToWrite = []
try{
for (let item of stocksData){
const suppliersData = item.Suppliers
const itemProperties = item.ItemExtendedProperties
const images = item.Images
const stockLev = item.StockLevels
let imageLink = ""
let itemsObj = {}
let supplierObj = {}
for (let supplier of suppliersData){
if(supplier.IsDefault){
supplierObj["supplierName"] = supplier.Supplier
supplierObj["supplierCode"] = supplier.Code
supplierObj["supplierBarcode"] = supplier.SupplierBarcode
supplierObj["supplierPP"] = supplier.PurchasePrice
}
}
for (let property of itemProperties){
if(property.ProperyName === "export-two-tone"
|| property.ProperyName === "export-postage"
|| property.ProperyName === "HSTariffCode"
|| property.ProperyName === "CountryOfOrigin"
|| property.ProperyName === "ShippingDescription"
|| property.ProperyName === "CountryOfOriginISO"
){
itemsObj[property.ProperyName] = property.PropertyValue
}
}
for (let image of images){
if(image.IsMain){
imageLink = image.FullSource
}
}
for (let stock of stockLev){
if(stock.Location.LocationName === "Default"){
var availableStock = stock.Available
}
}
stockItemsToWrite.push([
item.ItemNumber,
item.ItemTitle,
item.BarcodeNumber,
item.CategoryName,
item.PurchasePrice,
item.RetailPrice,
supplierObj["supplierName"],
supplierObj["supplierCode"],
supplierObj["supplierBarcode"],
supplierObj["supplierPP"],
itemsObj['CountryOfOrigin'],
itemsObj['CountryOfOriginISO'],
itemsObj['export-postage'],
itemsObj['export-two-tone'],
itemsObj['HSTariffCode'],
itemsObj['ShippingDescription'],
item.PackageGroupName,
imageLink,
availableStock
])
itemsObj = {}
supplierObj = {}
imageLink = ""
}
}catch(erorr){
console.log("some error while parsing: ", erorr)
}
// writing to the sheet
writeToSheet(stockItemsToWrite, "Sheet1")
}
この関数では、デフォルトのサプライヤー、拡張項目のプロパティ、画像、ストックレベルに関連するフィールドを取得することに興味があります.フィールドをパースした後、stockItemsToWrite
2次元配列です.2 D配列は、スプレッドシートAPIが2 D配列形式でペーストされるデータを受け入れるので、つくられます.データをシートに貼り付ける
function writeToSheet(data, sheetName) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
try {
// removes the previously exisiting data
sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).clear({ formatOnly: true, contentsOnly: true })
} catch (error) {
console.log(error)
}
sheet.getRange(2, 1, data.length, data[0].length).setValues(data)
}
上記の関数は、2 D配列を選択したシートに貼り付けます.フルスクリプト
あなたは完全なスクリプトを得ることができますmy github .
読書ありがとう.
Reference
この問題について(どのようにAPIを介してGoogleスプレッドシートにLinnworksからすべての在庫項目を取得するには?), 我々は、より多くの情報をここで見つけました https://dev.to/adeelrahman/how-to-get-all-your-stock-items-from-linnworks-to-google-spreadsheets-via-api-8jmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol