我在google驱动器上有一个在线电子表格。此电子表格是公开的,可通过网址访问。将export?format=csv
附加到公共网址会打开一个下载提示,允许客户端查看者通过选择文件位置并单击"下载",将在线电子表格文件的CSV版本下载到他们的计算机。
我想要做的是让我的PHP脚本与Google提供的下载链接https://docs.google.com/spreadsheets/d/<KEY>/export?format=csv
进行互动
而不是像www.example.com/file.csv
由于Google使用$_GET
?format=csv
值来指导客户端下载,我不能只使用include_once()
或类似的方法来访问我的脚本中的文件,因为将访问负责显示谷歌电子表格的HTML文件。
如果不是直接下载链接,如何通过PHP访问此在线下载? PHP之外的其他方法也是受欢迎的,只要我可以通过PHP访问CSV文件的数据(或暂时或永久地下载到服务器)
答案 0 :(得分:2)
简单file_get_contents()
应该可以正常使用。
$content = file_get_contents('https://docs.google.com/spreadsheets/d/<KEY>/export?format=csv');
答案 1 :(得分:0)
经过多天的混乱解决问题后,我终于根据网络上的多个教程和示例找出了这个问题。这些都不符合我的需求,但基本上这就是我想出的从互联网下载已发布的Google电子表格而不使用使用Google API 。
$fileid = "spreadsheet file id here";
$url = "https://docs.google.com/spreadsheets/d/".$fileid."/export?format=csv&id=".$fileid;
$newfilename = "newfile";
$file = fopen($url,"r");
$output = fopen($newfilename.'.csv', 'wb');
while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
fputcsv($output, $data);
}
fclose($file);
fclose($output);
运行此代码后,脚本会从Google电子表格中获取数据并将其输出到由$newfilename.csv
text/csv
格式package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import java.io.IOException;
import java.util.ResourceBundle;
import java.util.ArrayList;
import java.util.Random;
public class Controller {
playercard iceborn = new playercard(3, false, true, 0);
playercard fireball = new playercard(5, true, false, 0);
playercard warmogs = new playercard(0, false, false, 10);
ArrayList<playercard> playerhand = new ArrayList<>();
*******************************
public void add() {
playerhand.add(iceborn);
playerhand.add(fireball);
playerhand.add(warmogs);
}
public playercard output() {
Random rand = new Random();
int xzufallszahl = rand.nextInt(3);
int zufallszahl = xzufallszahl;
return playerhand.get(zufallszahl);
}
*********************************
@FXML
Stage stage;
public Button Startgameb;
@FXML
public ProgressBar enemyhpnow;
@FXML
public void Startgamebaction(ActionEvent event) throws IOException{
***************
add();
**************
Parent root = FXMLLoader.load(getClass().getResource("Menu.fxml"));
Pane root1 = FXMLLoader.load(getClass().getResource("Tutorial.fxml"));
Pane root2 = FXMLLoader.load(getClass().getResource("Game.fxml"));
Scene tutorialscene = new Scene(root1, 900, 600);
Scene gamescene = new Scene(root2, 900, 600);
Image card = new Image("sample/card.jpg");
ImageView firstplayercard = new ImageView();
firstplayercard.setImage(card);
firstplayercard.setFitWidth(120);
firstplayercard.setFitHeight(160);
firstplayercard.setLayoutX(50);
firstplayercard.setLayoutY(430);
ImageView secondplayercard = new ImageView();
secondplayercard.setImage(card);
secondplayercard.setFitWidth(120);
secondplayercard.setFitHeight(160);
secondplayercard.setLayoutX(175);
secondplayercard.setLayoutY(430);
ImageView thirdplayercard = new ImageView();
thirdplayercard.setImage(card);
thirdplayercard.setFitWidth(120);
thirdplayercard.setFitHeight(160);
thirdplayercard.setLayoutX(300);
thirdplayercard.setLayoutY(430);
ImageView fourthplayercard = new ImageView();
fourthplayercard.setImage(card);
fourthplayercard.setFitWidth(120);
fourthplayercard.setFitHeight(160);
fourthplayercard.setLayoutX(425);
fourthplayercard.setLayoutY(430);
ImageView fifthplayercard = new ImageView();
fifthplayercard.setImage(card);
fifthplayercard.setFitWidth(120);
fifthplayercard.setFitHeight(160);
fifthplayercard.setLayoutX(550);
fifthplayercard.setLayoutY(430);
root2.getChildren().addAll(firstplayercard, secondplayercard, thirdplayercard, fourthplayercard, fifthplayercard);
**********************************
firstplayercard.setOnMouseClicked(e ->{
enemyhpnow.setProgress(output().activate());
});
**********************************
Stage stage;
stage=(Stage) Startgameb.getScene().getWindow();
stage.setScene(gamescene);
stage.show();
}
}
确定的新创建文件。
我希望这有助于将来的某些人。我已经看到很多关于SO和网络其他部分的主题,关于如何在没有API的情况下以CSV格式访问Google电子表格数据,并且在从未找到不涉及API的真实答案之后,我认为我已经做完了!